我写了一个函数,它有两个列表,华氏值和摄氏值。我使用了一个选择排序方法,应该将值从最小值排序到最大值。可能的Fahr值介于-150和350之间(我写了一个函数来确保输入在这些数字内)。当我键入以下输入时:(30,60,10,-523235,-22,30)它会忽略-523235,但输出为:(10,30,60,-22,30)不是正确。它只排序前3个数字,但一旦输入负数,它就不会排序......我很困惑。
(摄氏值是由我写的另一个函数生成的,用于将Fahr值转换为Cels值,但这对于这个问题并不重要)
def selection_sort_Fahr_Cels(temp_values_Fahr, temp_values_Cels):
for i in range(0, len(temp_values_Fahr)):
minIndex = i
for val in range(i+1, len(temp_values_Fahr)):
if temp_values_Fahr[val] < temp_values_Fahr[i]:
minIndex = val
if minIndex != i:
temp_values_Fahr[i], temp_values_Fahr[minIndex] = temp_values_Fahr[minIndex], temp_values_Fahr[i]
for i in range(0, len(temp_values_Cels)):
minIndex = i
for val in range(i+1, len(temp_values_Cels)):
if temp_values_Cels[val] < temp_values_Cels[i]:
minIndex = val
if minIndex != i:
temp_values_Cels[i], temp_values_Cels[minIndex] = temp_values_Cels[minIndex], temp_values_Cels[i]
print(" ", " Fahr "," ", " Cels ")
print(" ", "======="," ", "=======")
for i in range(len(temp_values_Fahr)):
print(" ","{0: 6}{1:14.1f}".format(temp_values_Fahr[i], temp_values_Cels[i]))
print(" ", "======="," ", "=======")
整个程序超过100行,如果需要,我可以发布到整个程序的链接。
更新:我无法使用任何库函数进行排序。
答案 0 :(得分:0)
你真的不想使用所有复杂的代码来删除非法值并对它们进行排序。有更多的pythonic方式(我只做了Fahr值):
def selection_sort_Fahr_Cels(temp_values_Fahr, temp_values_Cels):
temp_values_Fahr[:] = sorted(filter(lambda x: x < 350 and x >= -150, temp_values_Fahr))
farh=[30, 60, 10, -523235, -22, 30]
selection_sort_Fahr_Cels(farh,[])
print(farh)
结果(列表就地修改):
[-22, 10, 30, 30, 60]
代码使用您的条件使用filter
方法,结果传递给sorted
方法,该方法采用可迭代的方法并从中创建一个列表。
更不用说python sorted
方法比冒泡排序更有效。
答案 1 :(得分:0)
def selectionsort( aList ):
for i in range( len( aList ) ):
least = i
for k in range( i + 1 , len( aList ) ):
if aList[k] < aList[least]:
least = k
swap( aList, least, i )
print(aList)
def swap( A, x, y ):
tmp = A[x]
A[x] = A[y]
A[y] = tmp
selectionsort(aList)
我找到了更好的选择排序方法。我注意到之前,我没有任何交换方法。