gpt4 book ai didi

Python排序txt文件的内容

转载 作者:太空狗 更新时间:2023-10-30 01:07:07 26 4
gpt4 key购买 nike

我有一个函数可以打开名为“table1.txt”的文件并将逗号分隔值输出为特定格式。

我的职能是:

def sort_and_format():

contents = []
with open('table1.txt', 'r+') as f:
for line in f:
contents.append(line.split(','))

max_name_length = max([len(line[0]) for line in contents])

print(" Team Points Diff Goals \n")
print("--------------------------------------------------------------------------\n")
for i, line in enumerate(contents):
line = [el.replace('\n', '') for el in line]
print("{i:3} {0:{fill_width}} {1:3} {x:3} {2:3} :{3:3}".format(i=i+1, *line,
x = (int(line[2])- int(line[3])), fill_width=max_name_length))

我想出了如何正确格式化它的“table1.txt 文件:

FC Ingolstadt 04, 13, 4, 6
Hamburg, 9, 8, 10
SV Darmstadt 98, 9, 8, 9
Mainz, 9, 6, 9
FC Augsburg, 4, 7, 12
Werder Bremen, 6, 7, 12
Borussia Moenchengladbach, 6, 9, 15
Hoffenheim, 5, 8, 12
VfB Stuttgart, 4, 9, 17
Schalke 04, 16, 14, 3
Hannover 96, 2, 6, 18
Borrusia Dortmund, 16, 15, 4
Bayern Munich, 18, 18, 2
Bayer Leverkusen, 14, 11, 8
Eintracht Frankfurt, 9, 13, 9
Hertha BSC Berlin, 14, 5, 4
1. FC Cologne, 13, 10, 10
VfB Wolfsburg, 14, 10, 6

它会输出:

Team                             Points  Diff  Goals     

--------------------------------------------------------------------------

1 FC Ingolstadt 04 13 -2 4 : 6
2 Hamburg 9 -2 8 : 10
3 SV Darmstadt 98 9 -1 8 : 9
4 Mainz 9 -3 6 : 9
5 FC Augsburg 4 -5 7 : 12
6 Werder Bremen 6 -5 7 : 12
7 Borussia Moenchengladbach 6 -6 9 : 15
8 Hoffenheim 5 -4 8 : 12
9 VfB Stuttgart 4 -8 9 : 17
10 Schalke 04 16 11 14 : 3
11 Hannover 96 2 -12 6 : 18
12 Borrusia Dortmund 16 11 15 : 4
13 Bayern Munich 18 16 18 : 2
14 Bayer Leverkusen 14 3 11 : 8
15 Eintracht Frankfurt 9 4 13 : 9
16 Hertha BSC Berlin 14 1 5 : 4
17 1. FC Cologne 13 0 10 : 10
18 VfB Wolfsburg 14 4 10 : 6

我正在尝试弄清楚如何对文件进行排序,以便得分最高的球队排名第一,如果一支球队的得分相等,那么他们将根据差异(进球数与进球数的差异)进行排名队),如果差异相同,则按进球数排名。

我想实现一个类似于以下的冒泡排序函数:

def bubble_sort(lst):
j = len(lst)
made_swap = True
swaps = 0
while made_swap:
made_swap = False
for cnt in range (j-1):
if lst[cnt] < lst[cnt+1]:
lst[cnt], lst[cnt+1] = lst[cnt+1], lst[cnt]
made_swap = True
swaps = swaps + 1
return swaps

但我不知道如何隔离每一行并将每一行的值相互比较以进行排序。

最佳答案

以下代码将按照您要求的方式对列表进行排序:

from operator import itemgetter
def sort_and_format():
contents = []
with open('table1.txt', 'r+') as f:
for line in f:
l = line.split(',')
l[1:]=map(int,l[1:])
contents.append(l)
contents.sort(key=itemgetter(2))
contents.sort(key=lambda team:team[2]-team[3])
contents.sort(key=itemgetter(1))
[printing and formatting code]

这有什么不同:首先,它将每个团队的所有数据转换为数字,不包括名称。这允许后面的代码对它们进行数学运算。然后第一个 contents.sort 语句按进球得分(索引 2)对列表进行排序。 operator.itemgetter(2) 只是表示 lambda l:l[2] 的一种更快的方式。下一个 contents.sort 语句 stably 按照负目标对目标对列表进行排序,就像 lambda 所做的那样。 稳定排序意味着同等比较元素的顺序不会改变,因此进球差相同的球队仍按进球数排序。第三个 contents.sort 语句按点进行相同的稳定排序。

关于Python排序txt文件的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33271483/

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