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

2 投票
7 回答
9035 浏览
提问于 2025-04-17 09:28

我有两个列表,想用小于(<)或大于(>)来比较它们,使用的是Python。

第一个列表(list1)是一个斜线,然后是一条水平线(可以想象成一个大约130度的钝角),第二个列表(list2)是我从第一个列表计算出来的一个负斜率的线性函数。我想做的是比较这两个列表list1list2,然后创建一个新的列表list3,这个列表的内容是所有在list1中大于list2的点。我在确定如何处理这个问题时遇到了麻烦。我尝试过列表推导式,但出现了错误。

ValueError: 一个包含多个元素的数组的真值是模糊的。

v = [c for c in f if c > y]
list1= [0.0, 0.36, 0.34, 0.32, 0.32, 0.3, 0.3, 0.28, 0.28, 0.26, 0.26, 0.24, 0.24, 0.22, 0.22, 0.2, 0.2, 0.18, 0.18, 0.16, 0.16, 0.14, 0.14, 0.12, 0.12, 0.1, 0.1, 0.08, 0.08, 0.06, 0.06, 0.04, 0.04, 0.02, 0.02, 0.0,..., 0.0]
list2= [ 0.36  0.35  0.34 ..., -9.62 -9.63 -9.64]

任何帮助、建议或指导都将非常感谢。如果我的问题有任何不清楚的地方,请告诉我。

7 个回答

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

这实际上就是在问:从列表1中选出那些比列表2中对应位置的元素大的元素。

如果其中一个列表比较长,那么多出来的元素就无法和另一个列表的元素进行比较,这些多出来的元素会被忽略掉。

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])
5

如果你的意思是说,list3 是从 list1 中选出来的那些值,而这些值在 list2 中对应的值是更小的,那么:

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

撰写回答