중첩 된 목록 이해 이해
중첩 된 목록 이해를 이해하고 싶습니다. 아래에 목록 이해 표현식과 이에 상응하는 for 루프를 나열했습니다.
내 이해가 올바른지 궁금합니다.
예를 들면
[(min([row[i] for row in rows]),max([row[i] for row in rows]))
for i in range(len(rows[0]))]
다음과 같다
result=[]
for i in range(len(rows[0])):
innerResult=[]
for row in rows:
innerResult.append(row[i])
innerResult2=[]
for row in rows:
innerResult2.append(row[i])
tuple=(min(innerResult), max(innerResult2))
result.append(tuple)
일반화 할 수 있다면
[exp2([exp1 for x in xSet]) for y in ySet]
양식은 다음과 같이 번역 할 수 있습니다. (나는 이것에 대해 옳기를 바랍니다)
result=[]
for y in ySet:
innerResult =[]
for x in xSet:
innerResult.append(exp1)
exp2Result = exp2(innerResult)
result.append(exp2Result)
더 간단한 경우에는
[exp1 for x in xSet for y in ySet]
와 동등하다
result=[]
for x in xSet:
for y in ySet:
result.append(exp1)
이므로,
[[exp1 for x in xSet] for y in ySet]
와 동등하다
result=[]
for y in ySet:
innerResult=[]
for x in xSet:
innerResult.append(exp1)
result.append(innerResult)
복잡한 목록 이해를위한 Equivalent for 루프 표현에 대해 비슷한 질문을했습니다.
거기에 주어진 답변은 내부적으로 무엇을하는지 이해 한 후 양식을 재구성합니다.
나는 그것이 체계적으로 어떻게 작동하는지 알고 싶다. 그래서 나는 다른 약간 다른 예에 개념을 적용 할 수있다.
짧은 대답은 : 예, 당신은 당신의 이해가 정확합니다 .
한 가지 문제가 있습니다. 일반적으로 파이썬 코드에서 중첩 된 목록 이해를 사용하는 방법은 다차원 배열에서 작동하는 것입니다.
일반적인 예는 행렬에서 작업하는 경우입니다.
>>> matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> [[el - 1 for el in row] for row in matrix]
[[0, 1, 2], [3, 4, 5], [6, 7, 8]]
보시다시피 "중첩"은 행렬의 각 차원에서 작동하여 작동합니다.
당신이 제공 한 예제에서, ySet
[불행한 이름 btw, 세트 는 파이썬과 함께 제공되는 유형 중 하나이기 때문에]는 단지 일반적인 카운터 일 뿐이며 내부에서 일어나는 일을 따라 가기가 조금 더 어려워집니다.
첫 번째 예는 다음과 같습니다.
>>> rows = ([1, 2, 3], [10, 20, 30])
>>> [(min([row[i] for row in rows]),max([row[i] for row in rows])) for i in range(len(rows[0]))]
[(1, 10), (2, 20), (3, 30)]
zip 내장 기능 을 살펴볼 수 있습니다 .
>>> zip(rows[0], rows[1])
[(1, 10), (2, 20), (3, 30)]
또는 최대한의 간결함과 우아함을 위해 :
>>> zip(*rows)
[(1, 10), (2, 20), (3, 30)]
HTH!
사실, 당신이 맞습니다. 이것은 Python Language Reference 의 Expressions 섹션 에 자세히 설명되어 있습니다.
Note especially the order of nesting of several for
s in a single list comprehension, which is always left-to-right:
>>> matrix = [[1, 2], [3, 4]]
>>> [item for item in row for row in matrix] # oops!
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
[item for item in row for row in matrix]
NameError: name 'row' is not defined
>>> [item for row in matrix for item in row] # nesting is in left-to-right order
[1, 2, 3, 4]
참고URL : https://stackoverflow.com/questions/8049798/understanding-nested-list-comprehension
'Nice programing' 카테고리의 다른 글
파이썬 히스토그램에 로그 빈을 갖는 방법 (0) | 2020.10.26 |
---|---|
메모리 효율적인 내장 SqlAlchemy 반복기 / 생성기? (0) | 2020.10.26 |
Julia의 잘못 작성된 R 예제 속도 향상 (0) | 2020.10.26 |
ActiveRecord 또는 쿼리 해시 표기법 (0) | 2020.10.26 |
따옴표로 정규식을 bash? (0) | 2020.10.26 |