所以我有一个.txt
文件如下:
131,263.07
47,170.14
170,190.01
180,412.69
53,401.53
我必须阅读该文件,以便输出如下列表:
131 kms, $263.07
47 kms, $170.14
170 kms, $190.01
180 kms, $412.69
53 kms, $401.53
我使用的代码是:
def PrintList(table):
for line in table:
print(str(line[0]) + " kms, $" + str(line[1]))
file = open(input("Enter file name: "))
table = []
for line in file:
line = line.rstrip().split(",")
line[0] = int(line[0])
line[1] = float(line[1])
table.append(line)
PrintList(table)
file.close()
现在我想按照价格递增的顺序对列表进行排序:
47 kms, $170.14
170 kms, $190.01
131 kms, $263.07
53 kms, $401.53
180 kms, $412.69
我如何在Python中实现它?我已尝试使用Selection Sort
执行此操作,但它似乎无法正常工作。
更新:感谢您到目前为止的输入。但是,我尝试了排序功能,但我想弄清楚如何使用Selection Sort
来实现它。
更新:我无法发布我已经使用过的Selection Sort
代码,因为我已经覆盖了它,但下面给出的代码示例(我用来排序)一个随机的距离列表)我必须修改以按价格递增的顺序对上述列表进行排序。希望它足够。
def selectionSort(distance):
n = len(distance)
for i in range(n):
minPlace = searchMin(distance)
swap(distance, i, minPlace+i)
def searchMin(distance):
minPlace = 0
n = len(distance)
for i in range(1, n):
if distance[i] < distance[minPlace]:
minPlace = i
return minPlace
def swap(distance, i, j):
temp = distance[i]
distance[i] = distance[j]
distance[j] = temp
如果有更简单的方法来实现这一点,请告诉我们。提前致谢。欢呼声。
答案 0 :(得分:1)
Python列表已经附带sort
方法。您可以简单地调用它,指定0 6
8 14
参数以确定如何排序。
key
请注意,我对您的程序进行了一些其他更改,即根据PEP8重命名PrintList,并使用with
statement以便文件自动关闭。
如果坚持使用Selection Sort(它会比Python的默认排序更糟糕),请在一个完成sorted
接口的辅助函数中实现它。
答案 1 :(得分:0)
是否绝对有必要实施选择排序?我会选择sorted
:
PrintList(sorted(table, key = lambda x: x[1]))
,其中
key = lambda x: x[1]
指示sorted
使用索引为1
(价格)的元素的值来比较您的对象。
答案 2 :(得分:0)
:
sorted_table = sorted(table, key=lambda row: row[1], reverse=True)
Sorted_table现在包含您的表格数据,按第2列排序。
然后,您可以将sorted_table
传递给PrintList功能。一种避免lambda的替代方法:
from operator import itemgetter
sorted_table = sorted(table, key=itemgetter(1), reverse=True)
有关python排序的更多信息,请参阅:https://wiki.python.org/moin/HowTo/Sorting
答案 3 :(得分:0)
蛮力选择排序
lst = [56,2,5,3,6,4,7,1,8,10,34]
print(lst)
#Total length of the list
leng=len(lst)
#Loop from 1st to last of the list
for i in range(leng):
#Assume first value as minimum
min = lst[i]
print(min,'Minimum value before the for loop')
#Scan through every value for checking the minimum
for j in range(i,leng):
if lst[j] < min:
min=lst[j]
ts=j
print(min,"Minimum value", ts, "Is it's corresponding index")
#We have now the new minimum value and it's corresponding index.
#Swap the new minimum value and the corresponding index
if min <lst[i]:
temp =lst[i]
lst[i]=lst[ts]
lst[ts]=temp
print(lst,'Outer list')