我遇到的问题包括搜索子列表中的特定值,并仅在列表中输出所需的子列表。
代码有助于理解我的问题:
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']
我的代码没有打印任何内容,我认为这是基于每个列表中的第一个数字未注释为整数的事实?你知道为什么这不起作用,我怎么能解决它?
答案 0 :(得分:2)
您正在将集合{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和过滤器对列表进行一次传递:
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())))
答案 1 :(得分:2)
由于
,您的代码不会打印任何内容if compare in list1:
compare
是一个集合,list1
不包含任何集合。
答案 2 :(得分:1)
如果largelist
(仅包含号码{12}
的集合)位于12
,则您的代码会打印list1
中的所有项目。如果要打印其编号在两个列表中的项目,可以使用:
for item in largelist:
if int(item[0]) in compare:
print('Found:', item)