比较两个大于>的列表或小于<

时间:2012-01-03 21:29:07

标签: python list list-comprehension

我有两个列表,我想与之比较<或者>在python中。

一个(list1)是斜率然后是水平线(图片是大约130度的钝角),第二个是具有负斜率的线性函数,我从第一个列表(list2)计算。我想要做的是比较两个列表list1list2并创建一个新的list3,其中list3 = list1> {中的所有点{1}}。我无法确定如何处理此问题。我尝试了列表理解,但是我收到了错误

  

ValueError:具有多个元素的数组的真值是不明确的。

list2

非常感谢任何帮助,建议或指导。如果我的问题不清楚,也请告诉我。

5 个答案:

答案 0 :(得分:5)

如果您的意思是list3list1list2对应值较小的值的集合,那么:

list3 = [item1 for item1, item2 in zip(list1, list2) if item1 > item2]

答案 1 :(得分:2)

你说“列表”,但是从错误信息和输出我怀疑你正在使用numpy数组。在任何情况下,v = [c for c in f if c > y]的问题在于您将元素c与数组y进行比较。您想要将元素与元素进行比较。

如果是列表,您可以执行以下操作:

>>> aa = [2,3,4,5]
>>> bb = [3,4,2,5]
>>> 
>>> z = [a for a,b in zip(aa,bb) if a > b]
>>> z
[4]

或者,如果你真的使用numpy数组,你可以更容易:

>>> import numpy
>>> aa = numpy.array([2,3,4,5])
>>> bb = numpy.array([3,4,2,5])
>>> aa > bb
array([False, False,  True, False], dtype=bool)
>>> aa[aa > bb]
array([4])

答案 2 :(得分:1)

[elmt1 for elmt1, elmt2 in zip(list1, list2) if elmt1 > elmt2]

这基本上直接反映了这个问题:从list1中选择大于list2中相应元素的元素。

如果其中一个列表较长,则无法将其额外元素与其他列表中的元素进行比较,并忽略它们。

答案 3 :(得分:0)

假设两个列表的大小相同,

list3 = [list1[i] for i in range(len(list1)) if list1[i]>list2[i]]

答案 4 :(得分:0)

使用izip_longest http://docs.python.org/library/itertools.html#itertools.izip_longest

list3 = [i for i,j in itertools.izip_longest(list1, list2, 0) if i > j]