提问人:tomaito 提问时间:10/19/2023 最后编辑:tomaito 更新时间:10/19/2023 访问量:64
如何在 Python 中将包含数据的列表与包含第一个列表索引的另一个列表进行排序?
How do I sort a list containing data with another list containing the first lists indexes in Python?
问:
作为家庭作业的一部分,我有两个文件。一个人有一个参与者名单,前面有数字。另一个文件具有与第一个列表相关的完成编号列表,例如:
- John
- 凯特
- 吉 米
第二个文件将包含: 3 1 2
所以比赛的结果将是
- 吉 米
- John
- 凯特。
如何对第一个列表对应于第二个列表的索引进行排序?我似乎无法获得正确的结果索引,也无法弄清楚如何将其与初始参与者列表联系起来。
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.
答:
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
评论