如何在 Python 中将包含数据的列表与包含第一个列表索引的另一个列表进行排序?

How do I sort a list containing data with another list containing the first lists indexes in Python?

提问人:tomaito 提问时间:10/19/2023 最后编辑:tomaito 更新时间:10/19/2023 访问量:64

问:

作为家庭作业的一部分,我有两个文件。一个人有一个参与者名单,前面有数字。另一个文件具有与第一个列表相关的完成编号列表,例如:

  1. John
  2. 凯特
  3. 吉 米

第二个文件将包含: 3 1 2

所以比赛的结果将是

  1. 吉 米
  2. John
  3. 凯特。

如何对第一个列表对应于第二个列表的索引进行排序?我似乎无法获得正确的结果索引,也无法弄清楚如何将其与初始参与者列表联系起来。

with open("participants.txt") as f:
    participants = []
    for line in f:
        participants.append(line.strip().split(". "))
    for i in range(len(participants)):   
        try:
            participants[i][0] = int(participants[i][0])
        except:
            continue
with open("participantresults.txt") as d:
    participantresults = []
    for line in d:
        participantresults.append(line.strip("\n"))
    for i in range(len(participantresults)):   
        osalejate_tulemused[i] = int(osalejate_tulemused[i])

resultindex = []
for n in osalejate_tulemused:
    resultindex.append(participantresults.index(n)) #faulty

result = []
for n in range(len(resultindex)):
  ..... 



with open("result.txt", "w") as f:
   #write the list here later.
   
Python 列表 排序

评论

0赞 Friedrich 10/19/2023
这是家庭作业问题吗?另外,您正在努力理解任务的哪个具体部分?请编辑并告诉我们。
2赞 Téo 10/19/2023
这回答了你的问题吗?根据并行列表中的相应值对列表进行排序
0赞 tomaito 10/19/2023
在提交这篇文章之前尝试过,我发现这是一个有用的解决方案,如果数字是它排序的索引。

答:

0赞 Jakub Vonšovský 10/19/2023 #1

将参与者转换为字典,以便密钥是他们在第一个文件中的标识符。然后,您可以通过第二个文件指向这些文件:

with open("participants.txt") as f:
    participants = []
    for i, line in enumerate(f):
        participants.append(line.strip().split(". "))

participants = {index: name for index, name in participants}

with open("participantresults.txt") as d:
    order = []
    for line in d:
        order.extend(line.strip().split(" "))

with open("tulemus.txt", "w") as fw:
    for i, p_index in enumerate(order):
        fw.write(f"{i+1}. {participants[p_index]}\n")
0赞 Codist 10/19/2023 #2

您不需要字典 - 只需要一个列表,提供与名称(participants.txt)相关的值,从 1 开始,不带间隔地递增。

还假设 participantresults.txt 中的值与问题一致 - 即全部在一行上

participants = ['']

with open("participants.txt") as p:
    for line in map(str.strip, p):
        if line: # ignore blank lines
            # the leading number in this file is irrelevant
            _, name = line.split(maxsplit=1)
            participants.append(name)

with open("participantresults.txt") as p, open("result.txt", "w") as r:
    for i, j in enumerate(map(int, next(p).split()), 1):
        print(f'{i}. {participants[j]}', file=r)

result.txt将如下所示:

1. Jimmy
2. John
3. Kate