list.remove()
去除第一發生的值,不是所有的這樣的值的。因此,你倆1
值先加至sort
,刪除這兩個1
值中的一個,那麼剩下的1
值再次添加到sort
:
>>> lst = [4,5,5,1,6,1]
>>> copy = lst.copy()
>>> sort = []
>>> min_ = min(copy)
>>> min_
1
>>> for k in copy:
... if k == min_:
... sort.append(min_)
...
>>> sort
[1, 1]
>>> copy.remove(min_)
>>> copy
[4, 5, 5, 6, 1]
>>> min_ = min(copy)
>>> min_
1
>>> for k in copy:
... if k == min_:
... sort.append(min_)
...
>>> sort
[1, 1, 1]
你可以使用列表解析刪除所有值,通過本質上創建一個新的副本,排除要通過過濾刪除的值:
copy = [v for v in copy if v != min_]
當然這不是非常有效。
請注意,您將遇到的下一個問題是,在完成所有range(len(lst))
迭代之前,您已經清空了copy
。您可以用while copy:
循環代替該循環。
或者,你可以只添加第一匹配min_
值來sort
:
for i in range(len(lst)):
min_ = min(copy)
for k in copy:
if k == min_:
sort.append(min_)
break
copy.remove(min_)
的break
月初結束for
循環。當然,你甚至不必循環地發現,最小值,這正是min()
呼叫已經做了,這樣你就可以完全放棄它:
for i in range(len(lst)):
min_ = min(copy)
sort.append(min_)
copy.remove(min_)