Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用过滤器的两个列表元素级比较_Python_Python 3.x_List_Filter_Itertools - Fatal编程技术网

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的输出进行过滤,对吗?