我有一个包含以下形式元素的列表:
[['37a1', 1], 153, 160, [[13, 2], [53, -1], [67, 2], [127, -1], [443, -1], [547, 2], [599, -1]]]
[['57a1', 1], 155, 157, [[5, 2], [11, -1]]]
[['198a1', 1], 156, 156, []]
[['551c1', 1], 155, 158, [[5, 5], [43, -1], [149, -1]]]
如何搜索列表中的元素,使[anything,-1]
成为我元素的一部分?在这种情况下,前两个和最后一个元素应该作为我的答案返回。
我知道如何在列表中仅提取一个与['37a1',1]
匹配的元素,例如:
matches = [x for x in regs if ['37a1', 1] in x]; matches
我猜测基于此,我应该做一些与上述非常相似的事情,但用['37a1', 1]
代替表示任何事情'。另一个例子,我希望能够在我的元素中搜索[anything,5]
,并将此列表中的最后一个元素作为输出返回。
答案 0 :(得分:2)
我假设你想测试每个列表的 last element 中的子列表,而不是前3个元素。
您需要针对每个嵌套列表中的每个元素进行测试;使用any()
可以提高效率:
[x for x in regs if any(sub[1] == -1 for sub in x[-1])]
any()
测试循环生成器表达式,直到找到True
值,此时它停止迭代并返回True
。这意味着只有x
中的第二个元素等于x[-1]
的子列表才会包含-1
。
答案 1 :(得分:2)
这适用于任意嵌套列表:
def has_items(m):
for x in m:
if isinstance(x, list):
if not isinstance(x[0], list):
if len(x) == 2 and x[1] == -1: return x
elif has_items(x): return x
return False
print has_items(reversed(m))