我正在尝试对与查询项相关的项列表进行分组。下面是问题的一个例子和我的尝试:
>>> _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]]]
问题出在查询项的每个循环之后,我希望将相关列表分组,但我的尝试并非如此。
感谢您的建议。
答案 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]]]