簡體   English   中英

查找列表中的元素並輸出子列表項

[英]Finding element within lists and output the sublist item

我遇到的問題包括搜索子列表中的特定值,並僅在列表中輸出所需的子列表。

該代碼將有助於理解我的問題:

list1 = [['12', '"id1"', '1'],['14', '"id1"', '1'],['16', '"id1"', '1']]
list2 = [['4', '"id8"', '1'],['6', '"id8"', '1'],['12', '"id8"', '1']]

list1_first = [int(item[0]) for item in list1]
list2_first = [int(item[0]) for item in list2]

compare = set(list1_first) & set(list2_first)

print(list1_first) # outputs: [12, 14, 16]
print(list2_first) # outputs: [4, 6, 12]
print(compare) # outputs: {12}

# find the compared value within list 1 and list 2
largelist = list1 + list2
print(largelist) # outputs: [['12', '"id1"', '1'], ['14', '"id1"', '1'], ['16', '"id1"', '1'], ['4', '"id8"', '1'], ['6', '"id8"', '1'], ['12', '"id8"', '1']]

for item in largelist:
    if compare in list1:
        print('Found:',item) # does not print anything
        # wanted output: Found: ['12', '"id1"', '1'], Found ['12', '"id8"', '1']

我的代碼沒有打印任何內容,我認為這是基於每個列表中的第一個數字未注釋為整數的事實? 你知道為什么這不起作用,我怎么能解決它?

您正在將集合{12}list1每個子列表進行比較,您需要查看每個子列表中的任何元素是否在集合中。

不完全確定你想要什么,但這可能更接近:

list1 = [['12', '"id1"', '1'],['14', '"id1"', '1'],['16', '"id1"',     

list1_first = [(item[0]) for item in list1]

compare = set(list1_first).intersection(ele[0] for ele in list2)

from itertools import chain

for item in chain(list1,list2):
    if compare.issubset(item):
        print('Found:',item)

哪個輸出:

Found: ['12', '"id1"', '1']
Found: ['12', '"id8"', '1']

你可以散列一個字符串,這樣就完全沒有意義了。

您還可以使用dict和filter對列表進行一次傳遞:

list1 = [['12', '"id1"', '1'],['14', '"id1"', '1'],['16', '"id1"', '1']]
list2 = [['4', '"id8"', '1'],['6', '"id8"', '1'],['12', '"id8"', '1']]


from itertools import chain
from collections import defaultdict
d = defaultdict(list)
for item in chain(list1,list2):
    d[item[0]].append(item)


print(list(filter(lambda x: len(x)> 1, d.values())))

您的代碼不會打印任何內容,因為

if compare in list1:

compare是一個集合, list1不包含任何集合。

如果{12} (僅包含數字12的集合)在list1 ,則代碼將打印largelist所有項目。 如果要打印其編號在兩個列表中的項目,可以使用以下命令:

for item in largelist:
    if int(item[0]) in compare:
        print('Found:', item)

暫無
暫無

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

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