繁体   English   中英

比较列表项整数python

[英]comparing list item integers python

我正在编写一个程序,该程序将每个游戏的每个用户的最后3个得分保存在一个文本文件中。 我已经写了保存它的代码,现在将数据带回到程序中,这将使用户获得很高的分数。 我也已经将分数保存在单独的列表中。所有用户第一分数保存在1中,列出了所有用户第二分数,另一个与第三分数相同。 我试图将它们放在自己的高分列表中,所以当我将列表与名称(在另一个列表中)合并时,我将能够按分数排序,但会附加到名称上。 贝娄是我写的代码:

    for i in range (2):
        if score1[i] > score2[i] or score1[i]> score3[i]:
            highscores.append(score1[i])
        elif score2[i] > score1[i] or score2[i] > score3[i]:
            highscores.append(score2[i])
        elif score3[i] > score1[i] or score3[i] > score2[i]:
            highscores.append(score3[i])

顺便说一下,它在范围2中的i中处于for循环中,因为它们目前只有2个用户。 我知道我对拥有或感到非常愚蠢,因为这意味着只需要一个事件就可以使它正常工作,但是当我尝试但它也不起作用时。 当我的导师说“我有一个正确的主意”时,请按照以下方式工作:我也希望这对其他在python中将列表项与整数进行比较的人有所帮助,因为我在互联网上找不到任何内容。 谢谢,我等待指导

  1. 您要使用and ,而不要使用or
  2. 您也可以使用a < b < c语法代替使用and
  3. 您真正应该做的是使用Python的内置max函数。 干净的单线而不是6行if-elif块。

     highscores.append(max(score1[i], score2[i], score3[i])) 

可能不允许这种分配,但是对于其他需要执行类似操作的人,从大量值中选择前3个值的简便方法是使用heapq.nlargest 如果有多个序列,则可以对其进行itertools.chain ,以避免串联(避免增加峰值内存使用量)。 您甚至可以将名称(带有zipitertools.repeat )附加到每个输入序列,以便所选的高分包括关联的用户:

from heapq import nlargest
from itertools import chain, repeat

highscores = nlargest(3, chain(zip(score1, repeat('user1')),
                               zip(score2, repeat('user2')),
                               zip(score3, repeat('user3'))))

那么highscores将是一个包含三个元素的list (从最高highscores最低分,由用户名断开的联系),每个元素都是形式为(score, username)tuple

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM