python - 我的列表比较器不想按照我想要的方式运行
问题描述
我是 python 的初学者,我有一个任务,winner_round 函数比较两个列表,并计算在游戏中有多少轮亚当的球队得分比对手多。如果两个列表不匹配,则返回 -1 这是我的代码:
def winner_round(list1,list2):
list1 = [30, 50, 10, 80, 100, 40]
list2 = [60, 20, 10, 20, 30, 20]
point = 0
for i in winner_round(list1,list2):
if list1>list2:
return -1
print(-1)
for pointA in list1:
for pointE in list2:
if pointA > pointE:
point+=1
break
return(point)
print(point)
对不起我的英语不好
解决方案
返回的唯一原因-1
是列表的大小不同;len
在您进行迭代之前,您可以使用 O(1) 操作进行检查。
之后,这只是列表项的逐点比较问题。假设list1
是亚当和list2
他的对手,
def winner_round(list1, list2):
if len(list1) != len(list2):
return -1
return sum(x > y for x, y in zip(list1, list2))
zip(list1, list2)
产生对(30, 60)
,(50, 20)
等。因为True == 1
and False == 0
(bool
是 的子类int
),您可以简单地将结果相加,其中的值list1
是一对中较大的值。
(您也可以使用map
,因为 2 参数函数作为第一个参数允许您将两个列表作为第二个和第三个参数传递,从而无需对zip
实例进行更明确的迭代。operator.gt
提供您需要的函数:
return sum(map(operator.lt, list1, list2))
哪个“更好”是个人喜好问题。)