将列表l中的每个元素移动到列表p

时间:2013-11-04 04:00:15

标签: python

我希望按升序将每个元素从一个列表转移到另一个列表。这是我的代码:

l=[10,1,2,3,4,5,6,7,8,9]  
p=[]  
for x in l :   
    p.append(min(l))  
    l.remove(min(l))  
print p
print l

但它会返回此结果:

[1, 2, 3, 4, 5]
[10, 6, 7, 8, 9]

我不知道为什么它停在中途,请帮帮我...谢谢!

4 个答案:

答案 0 :(得分:7)

这样做:

p = sorted(l)
#l = [] if you /really/ want it to be empty after the operation

你获得不稳定行为的原因是,当你迭代它时,你正在改变序列l 的大小,导致你跳过元素。

如果你想修复你的方法,你会这样做:

for x in l[:]: 

l[:]创建l副本,您可以在对原始l执行操作时安全地进行迭代。

答案 1 :(得分:1)

试试这个:

p = []
while len(l) > 0:
  p.append(min(l))
  l.remove(min(l))

使用while代替for会阻止您在迭代时修改列表。

答案 2 :(得分:0)

如果要保留原始未排序的数组,请使用l。

的副本

查看此答案以获取更多信息。 https://stackoverflow.com/a/1352908/1418255

答案 3 :(得分:0)

哎呀,我希望你的名单很短。否则,min()的所有内容都会产生一段缓慢的代码。

如果您的列表很长,您可以尝试堆(EG heapq,在标准库中)或树(EG:https://pypi.python.org/pypi/red-black-tree-mod)或treap(EG:https://pypi.python.org/pypi/treap/)。

对于你正在做的事情,我猜测一个heapq会很好,除非你的故事中有一部分你已经遗漏了,比如需要能够访问任意值而不仅仅是min。 / p>