这感觉就像一个简单的问题,但我无法弄清楚,我无法在任何地方找到答案。
在一行中,如何在两个不同的列表中使用两个相同的列表推导,并将结果作为两个单独的列表返回?
我正在尝试这样做:
listx = [x for x in listx if x != None]
listy = [y for y in listy if y != None]
有没有办法在一行中执行此操作?也许使用map()
或列表理解?
答案 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]