prosource

열거형 내부 목록 이해를 사용하는 Python

probook 2023. 5. 13. 10:18
반응형

열거형 내부 목록 이해를 사용하는 Python

다음과 같은 목록이 있다고 가정해 보겠습니다.

mylist = ["a","b","c","d"]

인덱스와 함께 값을 인쇄하려면 Python의enumerate이와 같은 기능

>>> 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']

다음은 딕트 목록입니다.

[{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']

다음 중 일관성이 없고 사전 이해 구문과 혼동되는 것은 무엇입니까?

>>> {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')])

오스카 로페스가 말했듯이, 당신은 열거형 튜플을 직접 전달할 수 있습니다.

>>> [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)

언급URL : https://stackoverflow.com/questions/10777271/python-using-enumerate-inside-list-comprehension

반응형