如何在没有python内置的情况下按列表的特定索引降序排序



我的问题是这个
1. Input N
2. Input N numbers are entered in the list. For example, N is 5 means 3,2,1,2,4 or 1,2,9,7,5 or 4,2,1,3,8 whatever, N is 3 means 1,2,3 or 7,4,8 or 2,13,26 whatever.

3. Input A and B

4. Sort descending order list only in index A to B. For example, N = 7 , input numbers are 3 2 0 6 7 9 1, A=2, B=5, the output is [3, 2, 9, 7, 6, 0, 1]

我的输出是这样的
[3,2,6,0,7,9,1]
[3,2,7,0,6,9,1]
[3],2,9,0,5,7,1]
[3

问题是最后2个输出太奇怪了,我不知道我做错了什么。

n = int(input())
list = []
for i in range(n):
list.append(int(input()))
a = int(input())
b = int(input())
b+=1
tmp=0
for i in range(a,b):
for j in range(a+1,b):
if list[i]<list[j]:
tmp=list[i]
list[i]=list[j]
list[j]=tmp
print(list)

您可以尝试以下操作:

n = int(input())
list = []
for i in range(n):
list.append(int(input()))
a = int(input())
b = int(input())
b+=1
tmp=0
for i in range(a,b):
for j in range(i+1,b):
if list[i]<list[j]:
tmp=list[i]
list[i]=list[j]
list[j]=tmp
print(list)

您可以在list中交换两个值,如下所示:

list_[i], list_[j] = list_[j], list_[i]

给你的一个建议:Don't use built-in data-type names as variable names.

我会尝试为自己简化它,也许可以尝试不使用循环。

您的列表生成,只需添加输入方向并将列表名称更改为";"main":

n = int(input("n:"))
main = []
for i in range(n):
main.append(int(input(f'{i+1} of {n}:')))
a = int(input("a:"))
b = int(input("b:"))

现在,将您的列表拆分为相应的部分,并使用内置的.sort((函数。

# Slice into three parts
start = main[:a]
mid = main[a:b+1]
end = main[b+1:]
# Sort the middle, descending
mid.sort(reverse = True)
# Re-combine the lists
main = start + mid + end
print(main)

最新更新