[英]List comprehension in nested lists Python
dev_a = [[True, 1, 2, 3], [False, 1, 2, 3], [True, 1, 2, 3]]
dev_b = []
我的目标是遍历dev_a
中的嵌套列表并检查[0]
是True
还是False
。 当[0]
为False
时,我需要dev_b
中的嵌套列表。
我的方法如下:
if (x[0] for x in dev_a) is False:
?
我不知道该告诉机器什么,它会复制整个数据集。
我需要这样,完成后:
dev_a = [[True, 1, 2, 3], [False, 1, 2, 3], [True, 1, 2, 3]]
dev_b = [False, 1, 2, 3]
你想要的是这个:
dev_a = [[True, 1, 2, 3], [False, 1, 2, 3], [True, 1, 2, 3]]
dev_b = [x for x in dev_a if x[0] == False]
不过请注意,这将是动态的,具体取决于您的输入。 所以你最终可能会得到一个或多个数组。
for sublist in dev_a:
if not sublist[0]:
dev_b.append(sublist)
是这样的吗?
如果您希望 dev_b 是一个平面列表,请使用 extend
for sublist in dev_a:
if not sublist[0]:
dev_b.extend(sublist)
你可以只使用filter
dev_a = [[True, 1, 2, 3], [False, 1, 2, 3], [True, 1, 2, 3]]
dev_b = list(filter(lambda l: l[0] is False, dev_a))
print(dev_b)
结果:
[[False, 1, 2, 3]]
如果您只想要一个结果而不是列表列表,请使用next()
而不是list()
。
尝试
dev_a = [[True, 1, 2, 3], [False, 1, 2, 3], [True, 1, 2, 3]]
dev_b = [e for e in dev_a if e[0] is False]
print(dev_b)
output
[[False, 1, 2, 3]]
如果你想要一个扁平的列表
# filter only the inner items you want using filter function
outer = list(filter(lambda a: a[0] == False, dev_a))
# or without using filter
outer = [a for a in dev_a if not a[0]]
# flatten all items
x = [item for inner in outer for item in inner]
结果:
[False, 1, 2, 3]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.