Python 使用过滤器的两个列表元素级比较
我有两个数字列表:Python 使用过滤器的两个列表元素级比较,python,python-3.x,list,filter,itertools,Python,Python 3.x,List,Filter,Itertools,我有两个数字列表: l1 = [12, 3, 4, 5, 7] l2 = [ 6, 8, 4, 2, 4] 我想从l1中检索比l2中的元素大的所有元素(按元素比较) 到目前为止,我只取得了 results = list(map(operator.gt,l1,l2) 它将返回一个[True,False,…]列表。但我想要价值观本身 我想不做任何循环,谢谢。我在考虑filter()或itertools() 谢谢您可以使用列表理解: [a for a, b in zip(l1, l2) if a
l1 = [12, 3, 4, 5, 7]
l2 = [ 6, 8, 4, 2, 4]
我想从l1
中检索比l2
中的元素大的所有元素(按元素比较)
到目前为止,我只取得了
results = list(map(operator.gt,l1,l2)
它将返回一个[True,False,…]
列表。但我想要价值观本身
我想不做任何循环,谢谢。我在考虑filter()
或itertools()
谢谢您可以使用列表理解:
[a for a, b in zip(l1, l2) if a > b]
或者您可以使用:
from operator import gt, itemgetter
list(map(itemgetter(1), filter(itemgetter(0), zip(map(gt, l1, l2), l1))))
所以你想从每对中得到
max
?不。只有来自l1的大于l2@jonrsharpe:我认为它只需要l1
中的值,如果它们是该对中的最大值<代码>l2值永远不会出现在结果中。那么,您希望得到什么输出?似乎您希望映射到l1
的值或None
,然后过滤掉None
,并且也希望有条件成功的索引。谢谢您的回复,但我想使用filter或itertoolsfunctions@JPV是的,我已经更新了我的答案,但是列表理解看起来更好:)这是我一直在寻找的东西,所以我也能更好地理解操作符。您能在这里解释一下itemgetter函数吗?itemgetter(1)
将从位置1抓取元素,例如,如果您正在执行itemgetter(1)((1,2))
将返回2so在我们的示例中,filter(itemgetter(0),zip(map(gt,l1,l2),l1)正在通过map的输出进行过滤,对吗?