오늘 오후에 나는 매우 지저분합니다. 어떻게하나의 int 목록에 중첩 된 문자열 목록을 균등하게 배열
[1,9,3,10,5,8,8,11,2,7,4,5,2,6]
에
['1,9', '3,10', '5,8', '8,11', '2,7', '4,5', '2,6']
을 변환합니까?
오늘 오후에 나는 매우 지저분합니다. 어떻게하나의 int 목록에 중첩 된 문자열 목록을 균등하게 배열
[1,9,3,10,5,8,8,11,2,7,4,5,2,6]
에
['1,9', '3,10', '5,8', '8,11', '2,7', '4,5', '2,6']
을 변환합니까?
>>> 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]
내가 가장 빠르게이었다보고 일부 (빠른) 테스트를 실행하기로 결정이 일에 대해 갈 수있는 여러 가지 방법이 있기 때문에보고. [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(',')))
그것에 대해 이동하는 가장 좋은 방법입니다.
Py2에서 가장 빠른 것은 'list (map (int,' '). join (L) .split (',')))'on Py 3 – jamylak
완벽하게 일했습니다. 감사드립니다. 나는 그 논리를 완전히 이해하고 있는지 확신 할 수 없다. 시간이 있다면, 나는 설명을 바르게 평가할 것이다. – user1478335
@ user1478335 나는 또한 이것을 덧붙였다 : – jamylak