목록 이해력의 이중 반복 [python]


Answers

Gee, 나는 anwser를 찾은 것 같아요 : 나는 내부 루프와 외부 루프에 대해 충분히 신경을 쓰지 않았습니다. 목록 이해력은 다음과 같아야합니다.

[x for b in a for x in b]

원하는 결과를 얻으려면 네 개의 현재 값이 다음 루프의 반복자가 될 수 있습니다. 죄송합니다.

Question

파이썬에서는 목록 이해력에 여러 개의 반복자를 사용할 수 있습니다.

[(x,y) for x in a for y in b]

일부 적합한 시퀀스 a 및 b에 대해서. 나는 파이썬의리스트 comprehensions의 중첩 된 루프 의미를 알고있다.

내 질문은 : 하나의 반복자가 다른 하나를 참조 할 수 있습니까? 다른 말로하면 : 나는 이런 식으로 할 수 있을까?

[x for x in a for a in b]

여기서 외부 루프의 현재 값은 내부의 반복자입니까?

예를 들어, 중첩 목록이있는 경우 :

a=[[1,2],[3,4]]

목록 이해력 표현이이 결과를 성취하는 것이 무엇입니까?

[1,2,3,4]

?? (알아 내고 싶은 부분이므로 이해력의 답변 만 기재하십시오.)




ThomasH는 이미 좋은 대답을 추가했지만, 어떻게되는지 보여주고 싶습니다.

>>> a = [[1, 2], [3, 4]]
>>> [x for x in b for b in a]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'b' is not defined

>>> [x for b in a for x in b]
[1, 2, 3, 4]
>>> [x for x in b for b in a]
[3, 3, 4, 4]

나는 파이썬이 목록 이해력을 왼쪽에서 오른쪽으로 분석한다고 생각한다. 즉, 발생하는 첫 번째 for 루프가 먼저 실행됩니다.

두 번째 "문제"는 b 가 목록 이해력에서 "유출"된다는 것입니다. 첫 번째 성공적인 목록 이해 후 b == [3, 4] .




다차원 배열을 유지하려면 배열 대괄호를 중첩해야합니다. 아래 예제를 보면 모든 요소에 하나가 추가됩니다.

>>> a = [[1, 2], [3, 4]]

>>> [[col +1 for col in row] for row in a]
[[2, 3], [4, 5]]

>>> [col +1 for row in a for col in row]
[2, 3, 4, 5]



또한 현재 액세스 된 입력 목록의 멤버와이 멤버의 요소에 대해 동일한 변수 만 사용할 수 있습니다. 그러나 이것은 심지어 더 이해하기 어려운 목록으로 만들 수도 있습니다.

input = [[1, 2], [3, 4]]
[x for x in input for x in x]

for x in input 첫 번째가 평가 for x in input 멤버 목록 하나가 나오면 파이썬은 액세스중인 현재 요소가 x 값을 덮어 쓰는 동안 for x in x 두 번째 부분을 처리하고 첫 x 는 우리가 돌려주고 싶은 것.