在两个单独的列表上使用相同的列表推导

时间:2017-12-07 14:53:37

标签: python

这感觉就像一个简单的问题,但我无法弄清楚,我无法在任何地方找到答案。

在一行中,如何在两个不同的列表中使用两个相同的列表推导,并将结果作为两个单独的列表返回?

我正在尝试这样做:

listx = [x for x in listx if x != None]
listy = [y for y in listy if y != None]

有没有办法在一行中执行此操作?也许使用map()或列表理解?

3 个答案:

答案 0 :(得分:10)

虽然我不明白为什么它必须是单行,但这应该做你想要的:

listx, listy = [[x for x in alist if x != None] for alist in [listx, listy]]

答案 1 :(得分:3)

我认为原始的和嵌套列表理解很好并且非常易读。

但是,如果你想考虑具有输入和输出的函数:

您希望filter列表中的某些内容,因此可以将其写为:

listx = filter(None, listx)
listy = filter(None, listy)

有一种repeated模式。这里的模式是我们一次更改多个列表。

map(function, collection)

因此,您可以使用map将原始问题细分为lists多个filter

listx, listy = map(lambda x: filter(None, x), [listx, listy])

答案 2 :(得分:1)

简单如下:

listx, listy = [x for x in listx if x != None], [y for y in listy if y != None]
相关问题