执行期间输出降序选择排序输出列表不变
Posted
技术标签:
【中文标题】执行期间输出降序选择排序输出列表不变【英文标题】:Descending selection sort with output during execution outputs the list unchanged 【发布时间】:2022-01-23 05:36:46 【问题描述】:编写一个程序,将整数列表作为输入,并使用选择排序将列表按降序排序。程序应该使用嵌套循环,并在外循环每次迭代后输出列表,从而输出列表 N-1 次(其中 N 是列表的大小)。
这就是我所拥有的,但输出只是按照输入的方式打印输入两次。我在这里做错了什么?
array = []
array.append(str(input(" ")))
for i in range(len(array)):
max_index = i
for j in range(i+1, len(array)):
if array[j] > array[max_index]:
max_index = j
print(array)
array[i],array[max_index] = array[max_index],array[i]
print(array)
输入:
0 10 20 30 40
输出:
['0 10 20 30 40']
['0 10 20 30 40']
【问题讨论】:
您正在对包含单个字符串的列表进行排序。 这能回答你的问题吗? Get a list of numbers as input from the user 您的列表包含一个元素,即字符串'0 10 20 30 40'
。它已经像以往一样有序。您需要在其上调用 .split()
以实际获取您似乎期望的 5 个项目的列表 - 如果您希望按数字而不是按字母顺序比较这些项目,然后在每个项目上调用 int()
。
我不熟悉 .split 命令。我将如何使用它?它是否允许读取输入并将其解释为数组,以便我可以按降序对数组进行排序?
【参考方案1】:
根据您的问题
我在这里做错了什么?
我将以这条线作为参考:
array.append(str(input(" ")))
>>> 0 10 20 30 40
print(array)
>>> ['0 10 20 30 40']
如您所见,输出的长度为 1。它只有一项是字符串。 您基本上将用户输入附加为单个字符串。因为您没有拆分输入中的项目。
解决方案
输入
0 10 20 30 40 50
1.此解决方案返回一个字符串列表。
有关 int 的列表,请参阅下面的解决方案 2。
我只是根据您在问题中的输入拆分字符串。
另外,请注意我的列表比较,我将比较更改为 int。
array = []
array=input(" ").split(" ")
for i in range(len(array)):
max_index = i
for j in range(i+1, len(array)):
if int(array[j]) > int(array[max_index]):
max_index = j
array[i],array[max_index] = array[max_index],array[i]
print(array)
输出
['50', '10', '20', '30', '40', '0']
['50', '40', '20', '30', '10', '0']
['50', '40', '30', '20', '10', '0']
['50', '40', '30', '20', '10', '0']
['50', '40', '30', '20', '10', '0']
['50', '40', '30', '20', '10', '0']
2.此解决方案返回整数列表。
在这里,我将拆分输入映射到数组中。
array = []
array=list(map(int, input(" ").split(" ")))
for i in range(len(array)):
max_index = i
for j in range(i+1, len(array)):
if array[j] > array[max_index]:
max_index = j
array[i],array[max_index] = array[max_index],array[i]
print(array)
输出
[50, 10, 20, 30, 40, 0]
[50, 40, 20, 30, 10, 0]
[50, 40, 30, 20, 10, 0]
[50, 40, 30, 20, 10, 0]
[50, 40, 30, 20, 10, 0]
[50, 40, 30, 20, 10, 0]
【讨论】:
有没有办法让输出格式化为 [50, 10, 20, 30, 40, 0] * 从输出中删除撇号 [50, 40, 20, 30, 10, 0 ] [50, 40, 30, 20, 10, 0] [50, 40, 30, 20, 10, 0] [50, 40, 30, 20, 10, 0] [50, 40, 30, 20, 10 , 0] *在末尾打印新行 是的,让我快速编辑答案@JaredJennings以上是关于执行期间输出降序选择排序输出列表不变的主要内容,如果未能解决你的问题,请参考以下文章