我想以升序将每个元素从一个列表转移到另一个列表。这是我的代码:
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]
我不知道为什么它在中途停止,请帮助我...谢谢!
我想以升序将每个元素从一个列表转移到另一个列表。这是我的代码:
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]
我不知道为什么它在中途停止,请帮助我...谢谢!
只需这样做:
p = sorted(l)
#l = [] if you /really/ want it to be empty after the operation
你得到不稳定行为的原因是你在l
迭代序列时改变了序列的大小,导致你跳过元素。
如果你想修复你的方法,你会这样做:
for x in l[:]:
l[:]
创建 的副本,l
您可以在对原始文件执行操作时安全地对其进行迭代l
。
尝试这个:
p = []
while len(l) > 0:
p.append(min(l))
l.remove(min(l))
使用while
而不是for
防止您在迭代列表时修改列表。
哎呀,我希望你的名单很短。否则,所有 min()'ing 将产生一段缓慢的代码。
如果您的列表很长,您可以尝试堆(EG heapq,在标准库中)或树(EG:https : //pypi.python.org/pypi/red-black-tree-mod)或treap(EG:https://pypi.python.org/pypi/treap/)。
对于您正在做的事情,我猜 heapq 会很好,除非您遗漏了您的故事的一部分,例如需要能够访问任意值而不仅仅是重复的 min 。
如果要保留原始未排序的数组,请使用 l 的副本。
查看此答案以获取更多信息。https://stackoverflow.com/a/1352908/1418255