gpt4 book ai didi

python - 我的列表中特定部分中的最小数字

转载 作者:行者123 更新时间:2023-11-30 23:24:23 24 4
gpt4 key购买 nike

我有一个关于Python的问题。我必须以特定方式对随机数列表进行排序(不允许使用 sort())。我将尝试解释:

我必须搜索最小的数字,并将这个数字与列表中第一个位置的数字交换。

然后,我再次搜索最小的数字,但这次忽略列表中的第一个数字,因为该数字已经排序。因此,我应该开始搜索从第二个数字(索引 1)到列表末尾的最小数字。然后找到的最小数字应与列表中的第二个数字交换(即索引 1)。

希望您能理解我的问题。这是我到目前为止编写的代码,但出现错误和/或排序不正确。

array = random_integers(10,size=10)
my_list = list(array)
for i in range(len(my_list)):
print my_list
a = min(my_list[i:len(my_list)])
b = my_list.index(a)
my_list[i],my_list[b]=my_list[b],my_list[i]
print my_list

我认为我的范围有问题,而且

a = min(my_list[i:len(my_list)])     

我想搜索最小的数字,但不在整个列表中,我该怎么做?

最佳答案

问题出现在这一行:

b = my_list.index(a)

因为这将搜索 my_list全部中第一次出现的a。如果相同的数字出现两次,则 b 将始终对应于最小的此类索引,该索引可能小于 i。所以你最终可能会移动一个已经排序的数字。

最明显的尝试是在调用 index 之前对 my_list 进行切片:

my_list[i:].index(a)

但请注意,索引将返回 0N-i 之间的值。我们需要 iN 之间的数字。因此,请务必将 i 添加到结果中:

b = my_list[i:].index(a)+i

因此,修复现有代码的最简单方法是:

for i in range(len(my_list)):
a = min(my_list[i:])
b = my_list[i:].index(a)+i
my_list[i], my_list[b] = my_list[b], my_list[i]

但请注意,min 正在搜索 my_list[i:] 中的所有项目,然后对 index 的调用将遍历相同的项目第二次列出。您可以在一次遍历中找到 b,如下所示:

    b = min(range(i, N), key=my_list.__getitem__)
<小时/>

演示:

import numpy as np
array = np.random.random_integers(10,size=10)
my_list = list(array)
N = len(my_list)
for i in range(N):
b = min(range(i, N), key=my_list.__getitem__)
my_list[i], my_list[b] = my_list[b], my_list[i]
print my_list

产量

[3, 10, 9, 6, 5, 3, 6, 8, 8, 4]
[3, 3, 9, 6, 5, 10, 6, 8, 8, 4]
[3, 3, 4, 6, 5, 10, 6, 8, 8, 9]
[3, 3, 4, 5, 6, 10, 6, 8, 8, 9]
[3, 3, 4, 5, 6, 10, 6, 8, 8, 9]
[3, 3, 4, 5, 6, 6, 10, 8, 8, 9]
[3, 3, 4, 5, 6, 6, 8, 10, 8, 9]
[3, 3, 4, 5, 6, 6, 8, 8, 10, 9]
[3, 3, 4, 5, 6, 6, 8, 8, 9, 10]
[3, 3, 4, 5, 6, 6, 8, 8, 9, 10]

关于python - 我的列表中特定部分中的最小数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23455861/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com