簡體   English   中英

如何在列表理解過程中檢查列表條件?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM