리스트 이해 python의 루프를 위해 2를 프레임하는 방법
아래와 같이 2개의 리스트가 있습니다.
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)
어떻게 하면 2개의 루프를 단일 라인 리스트 이해로 쓸 수 있을까요?
이를 기억하는 가장 좋은 방법은 목록 이해 내의 for 루프의 순서가 기존의 루프 접근법에 나타난 순서에 따라 결정된다는 것입니다.외부 대부분의 루프가 먼저 오고 그 후 내부 루프가 이어집니다.
따라서 목록 이해는 다음과 같습니다.
[entry for tag in tags for entry in entries if tag in entry]
일반적으로는if-else
첫 번째 for loop 앞에 스테이트먼트가 있고, 이 명령어가 있는 경우if
진술서, 그것은 마지막에 올 것입니다.예를 들어, 빈 목록을 추가하려면tag
입력되어 있지 않습니다.이렇게 하겠습니다
[entry if tag in entry else [] for tag in tags for entry in entries]
이것으로 충분합니다.
[entry for tag in tags for entry in entries if tag in entry]
적절한 LC는
[entry for tag in tags for entry in entries if tag in entry]
LC의 루프 순서는 네스트된 루프의 루프 순서와 비슷합니다.문장이 끝까지 가고 조건식이 선두에 있는 경우 등입니다.
[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']
목록 이해 대신 생성기 식을 사용합니다(또한 79자 제한과 완벽하게 일치합니다(문자는 제외).list
콜)
이해상 네스트 리스트의 반복은 루프에 대해 입력된 동등한 순서와 동일한 순서를 따라야 합니다.
이해하기 위해 NLP의 간단한 예를 들어보겠습니다.각 문장이 단어 목록인 문장 목록에서 모든 단어 목록을 생성하려고 합니다.
>>> list_of_sentences = [['The','cat','chases', 'the', 'mouse','.'],['The','dog','barks','.']]
>>> all_words = [word for sentence in list_of_sentences for word in sentence]
>>> all_words
['The', 'cat', 'chases', 'the', 'mouse', '.', 'The', 'dog', 'barks', '.']
반복된 단어를 제거하려면 목록 [] 대신 집합 {}을(를) 사용하면 됩니다.
>>> all_unique_words = list({word for sentence in list_of_sentences for word in sentence}]
>>> all_unique_words
['.', 'dog', 'the', 'chase', 'barks', 'mouse', 'The', 'cat']
또는 신청합니다.list(set(all_words))
>>> all_unique_words = list(set(all_words))
['.', 'dog', 'the', 'chases', 'barks', 'mouse', 'The', 'cat']
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']
return=[entry for tag in tags for entry in entries if tag in entry for entry in entry]
언급URL : https://stackoverflow.com/questions/18551458/how-to-frame-two-for-loops-in-list-comprehension-python
'sourcecode' 카테고리의 다른 글
SELECT 쿼리 빈 결과에 대한 단순 확인 (0) | 2023.04.09 |
---|---|
목표 C에서 상수를 생성하는 가장 좋은 방법은 무엇입니까? (0) | 2023.04.09 |
Windows PowerShell에서 표준 입력/출력 리다이렉트 (0) | 2023.04.09 |
Bash를 사용하여 파일에 문자열이 있는지 테스트하려면 어떻게 해야 합니다. (0) | 2023.04.09 |
목록을 피클 파일에 덤프하고 나중에 다시 검색 (0) | 2023.04.09 |