gpt4 book ai didi

python - 如何在Python中按降序对这个文本文件进行排序?

转载 作者:行者123 更新时间:2023-12-01 04:51:59 25 4
gpt4 key购买 nike

我的文本文件布局为:

Richard 3 1 5
Jeff 3 7 4
Arnold 2 1 9

我使用以下代码隔离了这些分数中的最高分数并重写了它:

with open ('class1.txt', 'r') as f, open("class11.txt", 'w') as fout:
lines = [line.strip() for line in f]
for line in lines:
splitted = [i for i in line.split(' ') if i]
nums = splitted[1:]
max_nums = max(map(int, nums))
name = splitted[0]
fout.write(str(max_nums) + (' ') + (name) + ('\n'))
print (splitted)

上面的代码现在交换两列,因此最大的数字在前面

9 Arnold

我现在需要按降序对这些数字进行排序。我尝试了很多方法,例如读取行和使用反转函数,但我得到了很多 \当我运行它时?

最佳答案

不要立即写出数据,而是将数据作为元组附加到列表中,然后对该列表进行排序。 然后写出数据。

重新实现您的阅读循环以创建该列表:

entries = []
with open ('class1.txt', 'r') as f:
for line in f:
row = line.split()
if not row:
continue
name = row[0]
max_score = max(map(int, row[1:]))
entries.append((max_score, name))

with open("class11.txt", 'w') as fout:
for max_score, name in sorted(entries, reverse=True):
fout.write('{} {}\n'.format(max_score, name)

我没有使用 line.strip()line.split(' '),而是使用了 0 参数 str.split() code> 版本,其中包含一个 strip 并在任意宽度空白处进行分割;这简化了每行处理。

使用 sorted() function 完成排序;设置 reverse=True 会反转排序顺序,因此最高分会列在最前面。因为entries是一个元组列表,这些元组是按照字典顺序排序的;首先比较两个元组的第一个元素(分数),如果两个条目具有相同的分数,则第二个元素(名称)确定排序顺序。

这确实意味着分数相同的条目将按名称的字母顺序倒序排序。如果这是一个问题,您将需要使用更复杂的排序键:

sorted(entries, key=lambda t: (-t[0], t[1]))

然后将key应用于每个元组以确定要排序的值;通过按负分向前排序,您仍然将最高分放在第一位,但如果出现平局,姓名仍按字母顺序向前排序。

对演示进行排序以说明差异;分数为 6 的两个“名字”交换位置:

>>> entries = [(5, 'foo'), (6, 'eggs'), (7, 'spam'), (6, 'bar')]
>>> sorted(entries, reverse=True)
[(7, 'spam'), (6, 'eggs'), (6, 'bar'), (5, 'foo')]
>>> sorted(entries, key=lambda t: (-t[0], t[1]))
[(7, 'spam'), (6, 'bar'), (6, 'eggs'), (5, 'foo')]

如果您想对已生成的输出文件进行排序,则必须再次读入它,拆分每一行,将第一个元素转换为整数,然后应用相同的排序并写入循环。

关于python - 如何在Python中按降序对这个文本文件进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28234890/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com