如何检索包含特定查询项的列表

时间:2015-05-20 21:32:04

标签: python list search

我正在尝试对与查询项相关的项列表进行分组。下面是问题的一个例子和我的尝试:

>>> _list=[[1,2,3],[2,3,4]]
>>> querylist=[1,2,4]
>>> relvant=[]
>>> for x in querylist:
        for y in _list:
            if x in y:
                relvant.append(y)

我的输出:

>>> relvant
[[1, 2, 3], [1, 2, 3], [2, 3, 4], [2, 3, 4]]

期望的输出:

[[[1, 2, 3]], [[1, 2, 3], [2, 3, 4]],[[2, 3, 4]]]

问题出在查询项的每个循环之后,我希望将相关列表分组,但我的尝试并非如此。

感谢您的建议。

2 个答案:

答案 0 :(得分:7)

我认为使用列表理解更清楚:

>>> _list = [[1,2,3],[2,3,4]]
>>> querylist = [1,2,4]
>>> [[l for l in _list if x in l] for x in querylist]
[[[1, 2, 3]], [[1, 2, 3], [2, 3, 4]], [[2, 3, 4]]]

内部表达式[l for l in _list if x in l]描述了包含x的所有子列表的列表。外部表达式的作用是获取查询列表中x的所有值的列表。

答案 1 :(得分:3)

通过对代码进行最小的更改,您可以创建新的虚拟列表来存储值,并在每个内部循环迭代结束时将其附加到主列表。

_list=[[1,2,3],[2,3,4]]
querylist=[1,2,4]
relvant=[]
for x in querylist:
    dummy = []
    for y in _list:
        if x in y:
            dummy.append(y)
    relvant.append(dummy)

print relvant
>>> [[[1, 2, 3]], [[1, 2, 3], [2, 3, 4]],[[2, 3, 4]]]
相关问题