将Python列表拆分为多个变量

将Python列表拆分为多个变量,python,list,sorting,split,leaderboard,Python,List,Sorting,Split,Leaderboard,大家好,我正在尝试为我的蛇游戏制作排行榜。我有一个排序工作,并将排序后的文件从下到上读回到列表中(我发现的排序是升序,我需要降序) 这是打印后的列表: ['', '47389094, purple', '', '9993, red', '', '34, Bobo', '', '19, Bob', '', '8, Jon', '', '1, Cameron'] 我想要10个单独的变量来存储前10个值。 我需要将它们存储为'47389094-紫色'和'9993-红色'等,以便它们可以显示在PyGa

大家好,我正在尝试为我的蛇游戏制作排行榜。我有一个排序工作,并将排序后的文件从下到上读回到列表中(我发现的排序是升序,我需要降序)

这是打印后的列表:

['', '47389094, purple', '', '9993, red', '', '34, Bobo', '', '19, Bob', '', '8, Jon', '', '1, Cameron']
我想要10个单独的变量来存储前10个值。 我需要将它们存储为'47389094-紫色'和'9993-红色'等,以便它们可以显示在PyGame窗口中的有序表中

我试图找出这个列表分割,但我找不到任何类似的例子,我想要什么

这可能是一种低效的方式,如果有人有其他想法,这将是一个巨大的帮助。谢谢

编辑-

以下是对文件进行实际排序的代码:

with open('Leaderboard.csv') as sample, open('LeaderBoardSort.csv', "w") as out:
    csv1=csv.reader(sample)
    header = next(csv1, None)
    csv_writer = csv.writer(out)
    if header:
        csv_writer.writerow(header)
    csv_writer.writerows(sorted(csv1, key=lambda x:int(x[0])))
这里的这个建议一开始是有效的,但现在抛出了indexer:list索引超出范围。我可以;我不知道我改变了什么来打破它,除了在排行榜上增加更多现在修复了,我删除了逗号和括号之间的空格

nl = [x.split(', ')[0] + ' - ' + x.split(', ')[1] for x in name if x]

您可以使用split,如您所说,将“,”作为拆分字符串。然后,我创建了一个新的列表,使用列表理解功能,按照您的需要使用连字符的分数/名称。(如果存在忽略空字符串的,则[:10]确保您只获得前十名分数(当然这里没有排序,所以它只获得前十个元素)


我认为,这应该可以完成您所追求的目标。

退一步问,也许加载列表的过程可以重构为在字典中插入/更新记录

由于订单很重要,您可以使用OrderedICT:

我不明白你要的是什么。你显示的列表有六个真实项目和六个空字符串,但你似乎想要十个项目?除了去掉空字符串,你还想有什么不同?只是更改了破折号的逗号吗?你能显示你正在使用的生成列表的代码吗(因为修复将空字符串放入列表的代码可能比在空字符串存在后将其剥离更容易)?该列表将有十个项目,它们尚未全部添加。我可能应该将它们全部放入。额外的空格通过排序添加到CSV文件中。我不确定如何在注释中添加代码块,因此如下所示:以open('leadboard.CSV')为示例,open('leadboardsort.CSV'),“w”)as out:csv1=csv.reader(sample)header=next(csv1,None)csv\u writer=csv.writer(out)if header:csv\u writer.writerow(header)csv\u writer.writerows(排序(csv1,key=lambda x:int(x[0]))不要把代码放在注释中。相反,你的问题应该包含相关的代码。好的,我会这样做。这很好,但它仍然是一个列表,我需要使用多个变量来存储列表的每个单独部分,或者找到一种方法,在PyGame窗口中垂直而不是水平显示列表。你能解释一下什么是列表吗ples是吗?这可能是一个更好的解决方案,学习一些新的东西总是很好的。谢谢你的帮助。我还需要它只显示列表中的前10个。由于某种原因,这已经停止工作,它现在显示Indexer:列表索引超出范围。我通过添加和删除值对CSV文件进行了一些更改,如果发生这种情况,你仍然使用t吗他列出要在PyGame中显示的内容。#初始化字体myfont=PyGame.font.SysFont(“monospace”,15)#循环使用nl:label=myfont.render(item,1,(255255,0))`screen.blit(label,(100100))我修正了错误,我删除了逗号和括号之间的空格。不知道为什么它会起作用,但它确实起了作用。现在我只需要在屏幕上正确格式化它。谢谢你的帮助。这看起来是个好主意,我不确定我是否有时间实施这样的解决方案,尽管我需要在周一之前完成,而且还有很多事情要做文件和测试(!)要做。可以肯定地说,我把它放晚了一点。
pygame.font.init()     #initialize pygame font module
myfont = pygame.font.SysFont('Comic Sans MS', 30)

scores = ['', '47389094, purple', '', '9993, red', '', '34, Bobo', '', '19, Bob', '', '8, Jon', '', '1, Cameron']

nl = [x.split(', ')[0] + ' - ' + x.split(', ')[1] for x in scores if x and len(x.split(', ')) == 2][:10]

for item in nl:
    score = myfont.render(item, False, (0, 0, 0))
    screen.blit(score,(0,0))