【问题标题】:Two list element wise comparison using filter使用过滤器的两个列表元素明智比较
【发布时间】:2020-03-28 02:11:52
【问题描述】:

我有两个数字列表:

l1 = [12, 3, 4, 5, 7]
l2 = [ 6, 8, 4, 2, 4] 

我想从l1 中检索比l2 中的元素大的所有元素(逐元素比较)

到目前为止我只实现了

results = list(map(operator.gt,l1,l2)

返回给我一个[True,False,...] 列表。但我想要值本身。

我想在没有任何 for 循环的情况下执行此操作,谢谢。我在考虑filter() 或itertools()

谢谢

【问题讨论】:

  • 所以你想要每对中的max?
  • 没有。只有那些 l1 大于 l2 的人
  • @jonrsharpe:我认为它只需要来自l1的值 if 它们是这对中的最大值; l2 值永远不会出现在结果中。
  • 那么你期待什么输出呢?似乎您想映射到 l1 的值或 None 然后过滤掉 Nones
  • 如果有条件成功的索引也会很有趣。

标签: python python-3.x list filter itertools


【解决方案1】:

您可以使用列表推导:

[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))))

【讨论】:

  • 感谢回复,但我想使用过滤器或itertools函数
  • @JPV 是的,我已经更新了我的答案,但列表理解看起来更好:)
  • 这是我一直在寻找的东西,这样我也可以更好地理解操作员。你能解释一下这里的itemgetter函数吗?
  • itemgetter(1) 将从位置 1 抓取元素,例如,如果您正在执行 itemgetter(1)((1, 2)) 将返回 2
  • 所以在我们的示例中,filter(itemgetter(0), zip(map(gt, l1, l2), l1)) 是通过 map 的输出进行过滤的,对吗?
猜你喜欢
  • 1970-01-01
  • 2021-05-06
  • 2019-11-27
  • 2020-07-04
  • 1970-01-01
  • 2020-01-18
  • 2019-12-07
相关资源
最近更新 更多