[python] 내부 목록 이해를 열거하는 파이썬

다음과 같은 목록이 있다고 가정 해 봅시다.

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)