我正在尝试以自己的方式实现选择排序。我正在以一种排序方式获得“ sorted_list”。但是,我无法弄清楚为什么在发现苏黎世是最高元素之后,下一个for loop通行证却跳过了开普敦。在所有找到下一个最高元素的实例中都是如此。在所有这些实例中,for循环中的下一步将跳过该最高元素旁边的元素。
names=['Newyork', 'London', 'Tokyo','Manila','New-Delhi',
'Osaka','Munich','Berlin','Newcastle', 'Turin','Moscow','Sydney',
'Zurich','Capetown']
sorted_list=[]
while names:
for name in names:
print(name)
element_index = names.index(name)
index=0
while index<len(names):
if name > names[index] or name == names[index]:
print(index)
index += 1
if index == len(names):
names.pop(element_index)
sorted_list.append(name)
break
if name < names[index]:
break
输出:
Newyork
0
1
London
Tokyo
0
1
2
3
4
5
6
7
8
Manila
New-Delhi
Osaka
0
1
Munich
Berlin
Newcastle
Turin
0
1
2
3
4
5
6
7
8
9
10
11
Moscow
Sydney
0
1
Zurich
0
1
2
3
4
5
6
7
8
9
10
11
12
13
Newyork
0
1
London
Tokyo
0
1
2
3
4
5
6
7
8
Manila
New-Delhi
Osaka
0
1
Munich
Berlin
Newcastle
Turin
0
1
2
3
4
5
6
7
8
9
10
11
12
Sydney
0
1
Capetown
Newyork
0
1
London
Tokyo
0
1
2
3
4
5
6
7
8
9
10
11
New-Delhi
Osaka
0
1
2
3
4
5
6
7
8
Munich
Berlin
Newcastle
Moscow
Sydney
0
1
2
3
4
5
6
7
8
9
10
Newyork
0
1
2
3
London
Manila
New-Delhi
Osaka
0
1
2
3
4
5
6
7
8
9
Berlin
Newcastle
Moscow
Capetown
Newyork
0
1
2
3
4
5
6
7
8
Manila
0
1
New-Delhi
0
1
2
3
4
Munich
0
1
Berlin
Newcastle
0
1
2
3
4
5
6
7
Capetown
London
0
Manila
0
1
New-Delhi
0
1
2
3
4
5
6
Berlin
Moscow
0
1
Capetown
London
0
Manila
0
1
Munich
0
1
2
3
4
5
Moscow
0
1
2
3
4
London
0
Manila
0
1
2
3
Capetown
London
0
1
2
Capetown
0
1
Berlin
0
答案 0 :(得分:0)
我认为此片段应解释发生的情况。
>>> L = [1, 2, 3, 4, 5]
>>> for i, elem in enumerate(L):
... L.pop(i)
...
1
3
5
当您将.pop()
中的"Zurich"
names
"Capetown"
移到"Zurich"
的位置,并且您进行循环时,请尝试转到下一个元素这个"Capetown"
。
在迭代list
时修改它是不安全的。
答案 1 :(得分:0)
我同意@ V.Ayrat尝试此操作可能会解决您的目的
names=['Newyork', 'London', 'Tokyo','Manila','New-Delhi', 'Osaka','Munich','Berlin','Newcastle',
'Turin','Moscow','Sydney', 'Zurich','Capetown']
# sorted_list=[]
for i in range(len(names)):
min_idx = i
for j in range(i+1, len(names)):
if names[min_idx] > names[j]:
min_idx = j
names[i], names[min_idx] = names[min_idx], names[i]