如何循环检查一个列表中的所有值是否都比另一个列表中的值大?

3

正如问题所示,我该如何循环检查列表中的所有值是否都大于另一个列表中的一组值?假设每个列表的长度相同,并且每个值将基于其索引与另一个值进行比较。

例如:

aList=[1,5,10,15,23]
bList=[0,4,9,14,22]
for x in range(len(aList)):
   if aList[x]>bList[x]:
      print("All values in aList are bigger than bList")
   else:
      print("Not all values in aList are bigger than bList")

这是我现在的代码,但由于循环的原因,我最终打印了5次。我只希望结果只打印一次。是否有人知道解决方法?

@AbdulAzizBarkat 如果你仔细阅读,我认为他正在寻找每个元素的成对比较。 - anon01
8个回答

9

使用allzip函数。

if all(a > b for a, b in zip(aList, bList)):
    print("All values in aList are bigger than bList")
else:
    print("Not all values in aList are bigger than bList")

1
使用numpy:
import numpy 

if np.all(np.array(aList) > np.array(bList)):
    print("All values in aList are bigger than bList")
else:
    print("Not all values in aList are bigger than bList")

2
在我看来,使用 numpy 处理这样一个微不足道的任务会过度杀伤力。 - Vishnudev Krishnadas
2
对于大型类数组操作,numpy是唯一的选择 :) - anon01
1
@Vishnudev,我不知道你认为这会过度杀伤力的方式是什么。Numpy很容易获得,得到良好支持,并且在数组操作方面比本地Python表现更好。 - anon01
1
另一方面,对于一个微不足道的(<100)项目集,我会选择您的zip + all解决方案,并根据需要进行扩展。这两种方法都是有效的解决方案。 - anon01
我同意对于更大的数组和多个操作,使用numpy会很有用。但是创建numpy数组本身是一项昂贵的操作,因此如果您正在寻找像某个OP提供的那样微不足道的输入,则不应使用它。 - Vishnudev Krishnadas
1
Numpy不仅对于这个问题来说过于复杂,而且比标准库慢。我用@Vishnudev的标准库解决方案和这个解决方案进行了时间实验。在最坏情况下测试大小达到10^9时,这个解决方案始终需要两倍的时间。@Vishnudev的解决方案的另一个优点是,它可以利用生成器处理大型问题,而这个解决方案将任何生成器都转换为np.array,对于非常大的情况,这可能会导致主机交换。 - Michael Ruth

0

试试这个:

aList=[1,5,10,15,23]
bList=[0,4,9,14,22]
aisbigger=True
for x in aList:
   for y in bList:
      if(x<y):
         aisbigger=False
if(aisbigger):
   print("All values in aList are bigger than bList")
else:
   print("Not all values in aList are bigger than bList")

编辑后: 如果我没理解错,您想要将每个元素与另一个列表中相同索引的元素进行比较。那么请尝试这个:

aList=[1,5,10,15,23]
bList=[0,4,9,14,22]
aisbigger=True
for x in range(len(aList)):
   if(aList[x]<bList[x]):
         aisbigger=False
if(aisbigger):
   print("All values in aList are bigger than bList")
else:
   print("Not all values in aList are bigger than bList")

0

你只需要对你的代码进行微小的调整。不要在每个元素处打印,只需检查条件,并根据布尔变量 eachGreater 的值在最后进行打印。

aList=[1,5,10,15,23]
bList=[0,4,9,14,22]

eachGreater = True

for x in range(len(aList)):
    if aList[x]>bList[x]:
        pass
    else:
        eachGreater = False
        break

if eachGreater:
    print("All values in aList are bigger than bList")
else:
    print("Not all values in aList are bigger than bList")

0

Numpy 的方法,使用模块 greater_equal

a=[1,5,10,15,23]
b=[0,4,9,14,22]

#Approach 1

if np.greater_equal(a,b).all():
    print("All values in aList are bigger than bList")
else:
    print("Not all values in aList are bigger than bList")

会给你

aList中的所有值都比bList大

并且

重新运行a=[1,5,10,15,20]的代码将会给你

aList中不是所有的值都比bList大


1
但我仍然更喜欢Vishnudev的建议,因为它具有短路评估的优点,一旦条件为真,它就不需要导入额外的“库”,例如在我的情况下不需要导入numpy - mpx

0
这是我的实现:
isGreater = True
for x in range(len(aList)):
    if aList[x]<bList[x]:
        isGreater = False
        break
if isGreater:
    print("List A is greater than List B")
else:
    print("List A is not greater than List B")

0
采用您所做的方法,只需设置一个标志变量,在循环后检查该标志并打印结果。以下是实现代码:
aList=[1,5,10,15,23]
bList=[0,4,9,14,22]
for x in range(len(aList)):
   if aList[x] < bList[x]:
      flag = True
      break
if flag:
    print('bList is bigger')
else:
    print('aList is bigger')

0
这里是最直接的解决方案。它与你已经拥有的内容略有不同,需要做出一些小的调整。
def each_item_larger(a, b):
    for pos in range(len(a)):
        if (a[pos] < b[pos]):
            return False
    return True

aList = [1, 5, 10, 15, 23]
bList = [0, 4, 9, 14, 22]

if each_item_larger(aList, bList):
    print(“Each item is larger.”)
else:
    print(“At least one item is smaller.”)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接