다음과 같은 목록이 있다고 가정 해 봅시다.
mylist = ["a","b","c","d"]
색인과 함께 값을 인쇄하려면 다음 enumerate
과 같이 Python 함수를 사용할 수 있습니다
>>> for i,j in enumerate(mylist):
... print i,j
...
0 a
1 b
2 c
3 d
>>>
이제 내부에서 사용하려고하면 list comprehension
이 오류가 발생합니다.
>>> [i,j for i,j in enumerate(mylist)]
File "<stdin>", line 1
[i,j for i,j in enumerate(mylist)]
^
SyntaxError: invalid syntax
그래서 내 질문은 : 목록 이해 내에서 열거 형을 사용하는 올바른 방법은 무엇입니까?
답변
이 시도:
[(i, j) for i, j in enumerate(mylist)]
i,j
목록 이해가 작동하려면 튜플 안에 넣어야 합니다. 또는 enumerate()
이미 튜플을 반환하는 경우 먼저 포장을 풀지 않고 직접 반환 할 수 있습니다.
[pair for pair in enumerate(mylist)]
어느 쪽이든 반환되는 결과는 다음과 같습니다.
> [(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd')]
답변
정말로 명확하게 말하면, 이것은 enumerate
목록 이해 구문과 관련이 없으며 모든 것과 관련이 있습니다.
이 목록 이해는 튜플 목록을 반환합니다.
[(i,j) for i in range(3) for j in 'abc']
이것은 dicts 목록입니다.
[{i:j} for i in range(3) for j in 'abc']
목록의 목록 :
[[i,j] for i in range(3) for j in 'abc']
구문 오류 :
[i,j for i in range(3) for j in 'abc']
일관성이없고 (IMHO) 사전 이해 구문과 혼동되는 내용 :
>>> {i:j for i,j in enumerate('abcdef')}
{0: 'a', 1: 'b', 2: 'c', 3: 'd', 4: 'e', 5: 'f'}
그리고 튜플 세트 :
>>> {(i,j) for i,j in enumerate('abcdef')}
set([(0, 'a'), (4, 'e'), (1, 'b'), (2, 'c'), (5, 'f'), (3, 'd')])
Óscar López가 언급했듯이 열거 형 튜플을 직접 전달할 수 있습니다.
>>> [t for t in enumerate('abcdef') ]
[(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd'), (4, 'e'), (5, 'f')]
답변
또는 목록 이해를 사용하지 않으려는 경우 :
>>> mylist = ["a","b","c","d"]
>>> list(enumerate(mylist))
[(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd')]
답변
긴 목록을 사용하는 경우 더 읽기 쉬운 것은 아니지만 목록 이해력이 더 빠릅니다.
~$ python -mtimeit -s"mylist = ['a','b','c','d']" "list(enumerate(mylist))"
1000000 loops, best of 3: 1.61 usec per loop
~$ python -mtimeit -s"mylist = ['a','b','c','d']" "[(i, j) for i, j in enumerate(mylist)]"
1000000 loops, best of 3: 0.978 usec per loop
~$ python -mtimeit -s"mylist = ['a','b','c','d']" "[t for t in enumerate(mylist)]"
1000000 loops, best of 3: 0.767 usec per loop
답변
방법은 다음과 같습니다.
>>> mylist = ['a', 'b', 'c', 'd']
>>> [item for item in enumerate(mylist)]
[(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd')]
또는 다음을 수행 할 수 있습니다.
>>> [(i, j) for i, j in enumerate(mylist)]
[(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd')]
오류를 가지고 그 이유는 당신이 ()의 주위에 실종 된 것이 었습니다 i
그리고 j
그것을 튜플 할 수 있습니다.
답변
튜플에 대해 명시하십시오.
[(i, j) for (i, j) in enumerate(mylist)]
답변
모든 훌륭한 답변들. 여기에있는 질문은 열거에 관한 것이지만 이와 같은 것은 어떻습니까? 또 다른 관점
from itertools import izip, count
a = ["5", "6", "1", "2"]
tupleList = list( izip( count(), a ) )
print(tupleList)
성능면에서 여러 목록을 병렬로 반복 해야하는 경우 더 강력 해집니다. 그냥 생각
a = ["5", "6", "1", "2"]
b = ["a", "b", "c", "d"]
tupleList = list( izip( count(), a, b ) )
print(tupleList)
