程序交换列表中不与所有测试用例一起工作的项目的位置



我正在编写一个简单的Python程序,用于交换用户输入列表中最小值和最大值的位置。代码如下:

def swap_min_max(a_list): # a_list here is called formal parameter     
min = 1
max = 0

for i in a_list:
if i > max:
max = i
elif i < min:
min = i

for i in range(len(a_list)):
if a_list[i] == max:
a_list[i] = min
elif a_list[i] == min:
a_list[i] = max
a_list = [int(str_numbers) for str_numbers in input().split() ] # Input list creation via list comprehension
swap_min_max(a_list)
print(*a_list)

代码没有我可以识别的问题,但它不能与所有测试用例一起工作-例如,输入3 4 5 2 1产生所需的3 4 1 2 5输出,但输入20 50 10 30 70 40产生20 50 10 30 1 40而不是20 50 70 30 10 40的预期输出。虽然我可以看到这与函数定义开始时的min和max变量有关,但我不确定为什么这个问题只在某些情况下出现。

minmax是内置的python函数。您可以使用这些函数来查找列表的最小值/最大值,然后获得元素的索引,并交换它们。

def swap_min_max(a_list): # a_list here is called formal parameter     
minVal = min(a_list)
maxVal = max(a_list)

minIndex = a_list.index(minVal)
maxIndex = a_list.index(maxVal)

a_list[minIndex], a_list[maxIndex] = a_list[maxIndex], a_list[minIndex]

a_list = [int(str_numbers) for str_numbers in input().split() ] # Input list creation via list comprehension
swap_min_max(a_list)
print(*a_list)

你可以把它变成一个混乱的一行代码:

a_list[a_list.index(min(a_list))], a_list[a_list.index(max(a_list))] = a_list[a_list.index(max(a_list))], a_list[a_list.index(min(a_list))]

20 50 10 30 70 40输入

返回20 50 70 30 10 40

def swap(alist):
mx, max_idx = max(alist), alist.index(max(alist))
mn, min_idx = min(alist), alist.index(min(alist))
alist[min_idx] = mx
alist[max_idx] = mn
return alist
swap(a_list)

返回[20, 50, 70, 30, 10, 40]

相关内容

  • 没有找到相关文章

最新更新