簡體   English   中英

如何檢查嵌套列表的每個子列表中是否存在值?

[英]How can I check if a value is present in every sublist of a nested list?

我有一個包含多個子列表的列表,每個子列表都填充有隨機整數。 我試圖找出一種方法來檢查第一個子列表中的哪些元素存在於每個子列表中,這是我到目前為止想到的:

            for element in sublist1:
                x = 1
                for i in range(len(list_of_sublists)-1):
                    if element in list_of_sublists[i]:
                        x = x + 1
                    elif element not in list_of_sublists[i]:
                        x = x - 1
                if x == len(allDocIDs):
                    listOfDocumentIDs.append(element)
                else:
                    pass

它似乎在有 2 個子列表時有效,但一旦有 3 個或更多,代碼似乎忽略了它們的存在。 是否有更簡單(更實用)的方法來執行此任務?

您可以遍歷第一個子列表( set只是確保 for 循環中的每個 i 都是唯一的,因此您不會檢查一個值兩次)並檢查每個值是否在每個子列表all

a = [[1,2,3,4], [2,2,2,2,1], [3,3,3,3,1], [4,4,4,1,4,4]]
for i in set(a[0]):
    print(i, all((i in j for j in a)))

Output:

1 True
2 False
3 False
4 False

或者使用列表理解:

[(i, all((i in j for j in a))) for i in list(set(a[0]))]

Output:

[(1, True), (2, False), (3, False), (4, False)]

如果該元素在第一個子列表和所有其他子列表中,則它在所有子列表中。 所以你的問題相當於詢問所有列表中有哪些項目。 您可以通過獲取所有子列表的交集來高效地執行此操作:

a = [[1,2,3,4], [2,2,4,2,1], [3,4,3,3,1], [4,4,4,1,4,4]]

set.intersection(*[set(l) for l in a])
# {1, 4}

這假設您不關心第一個子列表中的重復項。 如果您確實關心第一個子列表中的重復項,則可以取子列表的 rest 的交集,然后使用列表理解從第一個列表中過濾元素:

a = [[1, 2, 3, 4, 1], [2,2,4,2,1, 6], [3,4,3,3,1, 6], [4,4,4,1,4,4, 6]]

elements = set.intersection(*[set(l) for l in a[1:]])
[n for n in a[0] if n in elements]
# [1, 4, 1]

暫無
暫無

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

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