![](/img/trans.png)
[英]How to check the function condition inside the list comprehension in Python
[英]How to check the condition of a list during list comprehension?
假設我有一個三個單詞的列表,我想生成一個包含單詞中字符的列表。
使用for循環或列表理解可以輕松實現:
wordList = ["one", "two", "three"]
letterList = []
# Solution 1:
for word in wordList:
for letter in word:
letterList.append(letter)
# Solution 2:
letterList = [letter for word in wordList for letter in word]
print(letterList) # Prints: ['o', 'n', 'e', 't', 'w', 'o', 't', 'h', 'r', 'e', 'e']
但是,當這個問題變得更加困難時,我將無法使用列表理解來找到解決方案。
例如,假設我要生成先前的列表,但我也希望刪除所有重復的字符。
我可以使用for循環來做到這一點:
wordList = ["one", "two", "three"]
letterList = []
for word in wordList:
for letter in word:
if letter not in letterList:
letterList.append(letter)
print(letterList) # Prints: ['o', 'n', 'e', 't', 'w', 'h', 'r']
因此,我的問題是:在清單理解期間,如何檢查要構建的清單中是否有項目? 或更簡單地說:如何使用列表理解來完成上述操作?
在Python 3.6中,字典是有序的。 因此,您可以使用dict理解:
>>> list({letter:None for word in wordList for letter in word}.keys())
['o', 'n', 'e', 't', 'w', 'h', 'r']
從Python 3.7開始,將保證順序:
python新聞:😀@gvanrossum剛剛宣布,現在可以保證字典保留插入順序。 這是漫長旅程的結束。 來源 (2017-12-15)
如果順序不重要,則使用設定的理解
letter_set = {letter for word in wordList for letter in word}
如果訂單很重要,它會有點大
seen = set()
letter_list = [x for word in wordlist for x in word if x not in seen and not seen.add(s)]
或使用類似命令的字典
from collections import OrderedDict
my_list = OrderedDict.fromkeys(letter for word in wordList for letter in word).keys()
您已經設置了解決方案,但這是一個不同的解決方案:
除了使用該列表理解結果之外,還可以將該列表理解用於邏輯並將其附加到新列表中:
wordList = ["one", "two", "three"]
letterList = []
[letterList.append(letter) for word in wordList for letter in word if letter not in letterList]
print(letterList)
輸出:
['o', 'n', 'e', 't', 'w', 'h', 'r']
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.