簡體   English   中英

Python中的列表理解結構

[英]List comprehension structure in Python

我有以下結構

list1 = ["ab","ac","cd","de","fh","abcc","abcdef"]
list2 = ["acebfh"]
comprehension = [item for item in list1
                 if list(list2).count(i) < list(item).count(i) 
                 for i in set(list2)]

但返回:

分配前我被引用了

有沒有辦法用列表理解做到這一點?

列表推導的編寫順序與其嵌套的完全指定的對應編排順序相同,因此請拆開它的包裝。 您寫的內容實質上可以翻譯為:

for item in list1:
    if list(list2).count(i) < list(item).count(i):
        for i in set(list2):
            list.append(item)

注意,在for循環中定義之前,我們在if語句中引用了i。

如果您想要的就是這個:

for item in list1:
    for i in set(list2):
        if list(list2).count(i) < list(item).count(i):
            list.append(item)

那么您可以將列表理解寫為:

comprehension = [item for item in list1
                 for i in set(list2)
                 if list(list2).count(i) < list(item).count(i)]

嵌套循環的列表理解與您期望的相反。 您正在嘗試做類似的事情

[i for i in range(j) for j in range(10)]

而你應該做類似的事情

[i for j in range(10) for i in range(j)]

換句話說,“內部”循環位於外部循環之后,而內部循環(和條件)則位於第一位。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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