반응형
List Comprehension Python에서 두 개의 for 루프를 프레임하는 방법
다음과 같이 두 가지 목록이 있습니다.
tags = [u'man', u'you', u'are', u'awesome']
entries = [[u'man', u'thats'],[ u'right',u'awesome']]
나는에서 추출 항목을 원하는 entries
가에있을 때 tags
:
result = []
for tag in tags:
for entry in entries:
if tag in entry:
result.extend(entry)
두 개의 루프를 한 줄 목록 이해로 작성하려면 어떻게해야합니까?
이렇게해야합니다.
[entry for tag in tags for entry in entries if tag in entry]
이것을 기억하는 가장 좋은 방법은 목록 이해력 내 for 루프의 순서가 전통적인 루프 접근 방식에서 나타나는 순서를 기반으로한다는 것입니다. 대부분의 바깥 쪽 루프가 먼저 나오고 그 다음 안쪽 루프가 이어집니다.
따라서 동등한 목록 이해력은 다음과 같습니다.
[entry for tag in tags for entry in entries if tag in entry]
일반적으로 if-else
문은 첫 번째 for 회 돌이 앞에오고 , 문이 하나만 있으면 if
끝에 올 것입니다. 예를 들어 빈 목록을 추가하고 싶은 경우 tag
항목에없는 경우 다음과 같이합니다.
[entry if tag in entry else [] for tag in tags for entry in entries]
적절한 LC는
[entry for tag in tags for entry in entries if tag in entry]
LC의 루프 순서는 중첩 루프의 순서와 비슷합니다. if 문은 끝으로 이동하고 조건식은 시작 부분으로 이동합니다.
[a if a else b for a in sequence]
데모보기-
>>> tags = [u'man', u'you', u'are', u'awesome']
>>> entries = [[u'man', u'thats'],[ u'right',u'awesome']]
>>> [entry for tag in tags for entry in entries if tag in entry]
[[u'man', u'thats'], [u'right', u'awesome']]
>>> result = []
for tag in tags:
for entry in entries:
if tag in entry:
result.append(entry)
>>> result
[[u'man', u'thats'], [u'right', u'awesome']]
편집 -결과를 병합해야하므로 유사한 목록 이해를 사용한 다음 결과를 병합 할 수 있습니다.
>>> result = [entry for tag in tags for entry in entries if tag in entry]
>>> from itertools import chain
>>> list(chain.from_iterable(result))
[u'man', u'thats', u'right', u'awesome']
이것을 함께 추가하면
>>> list(chain.from_iterable(entry for tag in tags for entry in entries if tag in entry))
[u'man', u'thats', u'right', u'awesome']
여기에서는 목록 이해 대신 생성기 표현식을 사용합니다. ( list
전화 없이도 79 자 제한과 완벽하게 일치 )
tags = [u'man', u'you', u'are', u'awesome']
entries = [[u'man', u'thats'],[ u'right',u'awesome']]
result = []
[result.extend(entry) for tag in tags for entry in entries if tag in entry]
print(result)
산출:
['man', 'thats', 'right', 'awesome']
참고 URL : https://stackoverflow.com/questions/18551458/how-to-frame-two-for-loops-in-list-comprehension-python
반응형
'Nice programing' 카테고리의 다른 글
Google로 로그인하기 위해 OAuth2를 사용한 애플리케이션에서 로그 아웃하는 방법은 무엇입니까? (0) | 2020.10.08 |
---|---|
Google Maps V2를 사용하여 단일 마커를 제거하는 방법은 무엇입니까? (0) | 2020.10.08 |
Scala에서 => 및 () => 의미 (0) | 2020.10.08 |
Android, 장치를 회전 할 때 활동을 파괴하지 않는 방법은 무엇입니까? (0) | 2020.10.08 |
PATH, rails 및 gem의 경우 모드 040777에서“Insecure world writable dir / home / chance”경고 받기 (0) | 2020.10.08 |