我不明白为什么1和5打印三次。
(我知道我可以使用list.sort()
方法。)
lst = [4,5,5,1,6,1]
copy = lst.copy()
sort = []
for i in range(len(lst)):
min_ = min(copy)
for k in copy:
if k == min_:
sort.append(min_)
copy.remove(min_)
print(sort)
答案 0 :(得分:3)
list.remove()
删除了值的第一个,而不是所有这些值。因此,您首先将1
值添加到sort
,删除两个1
值中的一个,然后将剩余的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_]
次迭代之前,您已清空copy
。您可以使用range(len(lst))
循环替换该循环。
或者,您只需将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()