列表中元组的Python比较

2024-04-28 09:27:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个练习,需要我们比较两个元组列表

第一个列表(games)有3个元组,每个元组对应一个游戏匹配,有2个人的名字

第二个列表(results)也有3个元组,每个元组对应于每个匹配的结果(按games排序)

games = [("anna", "ross"), ("manny", "maria"), ("rita", "joel")]
results = [(2, 0), (1, 3), (1, 1)]

期望的输出应该是这样的:

['anna', 'maria', 'TIE']

当匹配的两个分数相同时,输出'TIE'

我试图用zip函数来解决这个问题,但由于某种原因,我无法在元组的所有级别上正确迭代

第一次尝试:

lst = []
i = 0
for a, b in zip(games, results):
    if b[i] == max(b):
        lst.append(a[i])
    elif min(b) == max(b):
        lst.append("TIE")
i = i + 1
print(lst)

这返回了['anna', 'rita'],这让我觉得使用b[i]迭代列表/元组有问题

然后我试着这样做:

lst = []
for i, c in list(zip(games, results)):
    for j, k in i, c:
        if k == max(c):
            lst.append(i[j])
        elif min(c) == max(c):
            lst.append('TIE')
print(lst)

这返回了['maria', 'TIE', 'joel'],因此我认为问题不仅仅在于迭代,还可能在于我进行比较的方式(使用max函数查找最高分数)

有人能给我一些提示或提示来帮助我解决问题吗? 我只是在花了很长时间在网上寻找类似的问题,却找不到任何真正有帮助的东西后才提出这个问题


Tags: in列表forzipresultsmaxgames元组
3条回答

试试这个:

games=[("anna","ross"),("manny","maria"),("rita","joel")]
results=[(2,0),(1,3),(1,1)]
output = []
for g, r in zip(games, results):
    if r[0] == r[1]:
        output.append("TIE")
    elif r[0] < r[1]:
        output.append(g[1])
    else:
        output.append(g[0])

第二次尝试中的一个问题是,即使出现平局,k==max()也会返回True。平局意味着元组中的两个值都是最大值,因为它们是相同的

^{}是你在这里的朋友。尝试:

games=[("anna","ross"),("manny","maria"),("rita","joel")]
results=[(2,0),(1,3),(1,1)]
final = []

for n, t in enumerate(results):
  if t[0] > t[1]:
    final.append(games[n][0])
  elif t[0] < t[1]:
    final.append(games[n][1])
  else:
    final.append("TIE")

['anna', 'maria', 'TIE']

Demo

试试这个:

games=[("anna","ross"),("manny","maria"),("rita","joel")]
results=[(2,0),(1,3),(1,1)]

def calculateResult(x,y):
    if(y[0]>y[1]):
        return x[0]
    elif(y[1]>y[0]):
        return x[1]
    else:
        return "TIE"

res = []
for i in range(len(games)):
    res.append(calculateResult(games[i],results[i]))
print(res)

在这里,我将列表、游戏和结果中的各个元组传递到一个函数中,该函数比较结果并相应地返回游戏的输出

相关问题 更多 >