myfile = open('Results.txt')
title = '{0:20} {1:20} {2:20} {3:20} {4:20}'.format('Player Nickname','Matches Played','Matches Won','Matches Lost','Points')
print(title)
unsorted_data = list()
for line in myfile:
item = line.split(',')
points = int(item[2]) * 3
item.append (points)
if item[2] != 0:
unsorted_data.append(item)
sorted_data = sorted(unsorted_data,key=lambda x : x[5], reverse= True)
for item in sorted_data:
result = '{0:20} {1:20} {2:20} {3:20} {4:<20}'.format(*item)
print(result)
大家好,我对python很陌生。最近在询问了关于如何对列表进行排序的另一个问题后,我现在又遇到了另一个问题。当程序打印我的结果时,会打印出一堆重复的名字。我如何解决它?有没有办法将.rstrip()放入item [3],因为那里有换行符代码,我想摆脱它。一起排序列表。
以下是文件中的一些示例:
Esports,19,8,11
RNGesus,19,7,12
Kes,19,9,10
Magnitude,19,6,13
答案 0 :(得分:0)
您没有为每一行清除unsorted_data
,因此每次都使用相同的列表。将其移动到for循环中,以便每次迭代创建一个新列表
for line in myfile:
unsorted_data = [] # can use [] instead of list()
或者只使用item
中的列表(split
)代替。
sorted_data = sorted(item,key=lambda x : x[4], reverse= True)
除非你想要一个包含所有数据的列表,否则将你的for循环移到外部for循环之外,这样它就会在最后输出所有数据
至于\n
之前的strip
{/ 1}}。
split
答案 1 :(得分:0)
Python使用缩进来分隔块。在您的代码中,打印循环嵌入在读取循环中。
尝试以下方法:
myfile = open('Results.txt')
title = '{0:20} {1:20} {2:20} {3:20} {4:20}'.format('Player Nickname','Matches Played','Matches Won','Matches Lost','Points')
print(title)
unsorted_data = list()
for line in myfile:
item = line.strip().split(',')
points = int(item[2]) * 3
item.append (points)
if item[2] != 0:
unsorted_data.append(item)
sorted_data = sorted(unsorted_data,key=lambda x : x[4], reverse= True)
for item in sorted_data:
result = '{0:20} {1:20} {2:20} {3:20} {4:<20}'.format(*item)
print(result)