2013-05-10 1 views

답변

4
>>> L = ['1,9', '3,10', '5,8', '8,11', '2,7', '4,5', '2,6'] 
>>> [int(y) for x in L for y in x.split(',')] 
[1, 9, 3, 10, 5, 8, 8, 11, 2, 7, 4, 5, 2, 6] 

이 중첩 된리스트 통합이에 동등하게 작동합니다 : 당신이 볼 수 있듯이, 하향식 구조가가는

res = [] 
for x in L: 
    for y in x.split(','): 
     res.append(int(y)) 

에서 지능형리스트에서 왼쪽에서 오른쪽으로

즉, .

[int(y) 
for x in L 
for y in x.split(',')] 

이제 해결되지 않은 부분은 for 루프와 같습니다.


또 다른 방법 :

>>> [int(x) for x in ','.join(L).split(',')] 
[1, 9, 3, 10, 5, 8, 8, 11, 2, 7, 4, 5, 2, 6] 
+0

완벽하게 일했습니다. 감사드립니다. 나는 그 논리를 완전히 이해하고 있는지 확신 할 수 없다. 시간이 있다면, 나는 설명을 바르게 평가할 것이다. – user1478335

+0

@ user1478335 나는 또한 이것을 덧붙였다 : – jamylak

1

내가 가장 빠르게이었다보고 일부 (빠른) 테스트를 실행하기로 결정이 일에 대해 갈 수있는 여러 가지 방법이 있기 때문에보고. [int(x) for x in ''.join(L).split(',')]가 황당처럼

python -m timeit -s "L = ['1,9', '3,10', '5,8', '8,11', '2,7', '4,5', '2,6']" "[int(x) for x in ''.join(L).split(',')]" 
>>> 100000 loops, best of 3: 3.2 usec per loop 

python -m timeit -s "L = ['1,9', '3,10', '5,8', '8,11', '2,7', '4,5', '2,6']" "[int(y) for x in L for y in x.split(',')]" 
>>> 100000 loops, best of 3: 6.38 usec per loop 

python -m timeit -s "L = ['1,9', '3,10', '5,8', '8,11', '2,7', '4,5', '2,6'];from itertools import chain" "[int(x) for x in chain.from_iterable(l) if x != ',']" 
>>> 100000 loops, best of 3: 6.68 usec per loop 

보인다.

편집 :는 jamylak의 제안 나는 다음 테스트를 추가 한 태그 : python3에 대한

python -m timeit -s "L = ['1,9', '3,10', '5,8', '8,11', '2,7', '4,5', '2,6']" "map(int, ''.join(L).split(','))" 
>>> 100000 loops, best of 3: 2.79 usec per loop 

python -m timeit -s "L = ['1,9', '3,10', '5,8', '8,11', '2,7', '4,5', '2,6']" "list(map(int, ''.join(L).split(',')))" 
>>> 100000 loops, best of 3: 3.02 usec per loop 

그래서 map(int, ''.join(L).split(',')) 또는 list(map(int, ''.join(L).split(','))) 그것에 대해 이동하는 가장 좋은 방법입니다.

+0

Py2에서 가장 빠른 것은 'list (map (int,' '). join (L) .split (',')))'on Py 3 – jamylak

관련 문제