Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 重新排列三个列表并保持索引之间的关系?_Python_List - Fatal编程技术网

Python 重新排列三个列表并保持索引之间的关系?

Python 重新排列三个列表并保持索引之间的关系?,python,list,Python,List,试图创建一个highscores系统,用户可以搜索一个名字并返回该人获得的所有分数以及他们得分的“单词”(几乎像一个关卡/阶段)。(这是一个刽子手/猜字游戏。) 我现在拥有的系统有一个主列表,如从文本文件导入的主列表: word1 score1 name1 word2 score2 name2 ... 然后,我将此列表拆分为其他三个列表: list = [ word1, word2 ... ] list_scores = [ score1, score2 ... ] list_name

试图创建一个highscores系统,用户可以搜索一个名字并返回该人获得的所有分数以及他们得分的“单词”(几乎像一个关卡/阶段)。(这是一个刽子手/猜字游戏。)

我现在拥有的系统有一个主列表,如从文本文件导入的主列表:

word1
score1
name1
word2
score2
name2
...
然后,我将此列表拆分为其他三个列表:

list = [ word1, word2 ... ] 

list_scores = [ score1, score2 ... ] 

list_names = [ name1, name2 ... ]
(分数以时间为单位,四舍五入到小数点后3位)

其工作方式是每个列表中的每个元素都对应于同一索引的其他两个列表中的元素

>>>print "%s solved %s in %r seconds" % ( list_names[0], list[0], list_scores[0] )
Josh solved dog in 1.009 seconds
我的任务是允许用户在列表名称中搜索名称,然后让它根据时间顺序返回所有分数,但保持列表中的名称和单词连接。


我最初尝试接受输入并遍历列表名称以查找任何匹配项,然后使用所有三个列表的相同索引打印上述语句。问题是,它的功能与我所希望的不同,但结果不是按顺序排列的

以下是我目前的情况:(为结构糟糕的代码提前道歉)

(lni[:-1]从每个单词中删除新行转义)


我意识到我应该使用dicts或其他系统来组织数据,但我已经围绕该系统构建了整个游戏,并且最终添加了高分功能,以尝试在游戏原有的结构中发挥作用

一旦我完成这个项目,我计划回去重写它,所以我确实非常感谢任何关于创建更高效或python代码的评论

压缩、排序、解压缩:

list_words, list_scores, list_names = zip(*sorted(zip(list_words, list_scores, list_names)))
我还将
list
重命名为
list\u words
,以防止名称冲突

要解释*参数打包,请理解以下两个调用是相同的:

function(1, 2, 3)
function(*[1, 2, 3])
列表
[1,2,3]
是“解包”的,它的每个元素都作为参数传递给函数。因此,您可以通过“解压”轻松“重新组织”列表:

(请注意,Python 3需要在此输出上调用
list()
,以查看底层结构)


排序()之前的
*
的意义是什么?我已经添加了一个指向文档的链接,但是*before-zip的第一个参数使其成为一个“unzip”列表/元组解包。它将
[sub1,sub2,sub3]
转换为
sub1,sub2,sub3
(注意,它不再是一个列表
。因此,如果
L=[sub1,sub2,sub3]
,调用
f(L)`就可以
f([sub1,sub2,sub3])
,而调用
f(*L)
就可以
f(sub1,sub2,sub3)
这正是我所需要的。我不完全理解为什么它能工作,但它能工作。谢谢。@Scherf我已经添加了一些附加信息和链接。希望这有帮助!
function(1, 2, 3)
function(*[1, 2, 3])
>>> zip(*[[1,2,3], ['a', 'b', 'c']])
[(1, 'a'), (2, 'b'), (3, 'c')]