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