繁体   English   中英

嵌套列表中的列表理解 Python

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM