在列表中查找元素并输出子列表项

时间:2015-08-06 10:09:34

标签: python

我遇到的问题包括搜索子列表中的特定值,并仅在列表中输出所需的子列表。

代码有助于理解我的问题:

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']

我的代码没有打印任何内容,我认为这是基于每个列表中的第一个数字未注释为整数的事实?你知道为什么这不起作用,我怎么能解决它?

3 个答案:

答案 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)