我想按升序将每个元素从一个列表转移到另一个列表。这是我的代码:将列表l中的每个元素移动到列表p
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中的每个元素移动到列表p
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
你可以放心地迭代。
这是最简单,最具Pythonic的方式。不知道为什么每个人都使它复杂化。另外,如果你不想假设'p'是空的,并且想要附加'l'的排序元素,你可以执行'p + = sorted(l)'。 –
如果要保留原始未排序数组,请使用l的副本。
查看此答案以获取更多信息。 https://stackoverflow.com/a/1352908/1418255
哎,我希望你的名单很短。否则,所有min()都会产生一段缓慢的代码。
如果您的列表很长,您可以尝试一堆(EG heapq,标准库)或树(EG:https://pypi.python.org/pypi/red-black-tree-mod)或treap(EG:https://pypi.python.org/pypi/treap/)。
对于你正在做的事情,我猜heapq会很好,除非你的故事的一部分被遗漏了,比如需要能够访问任意值而不仅仅是min。
这是一个糟糕的想法,当*你正在迭代它时,改变数据结构*。对于快速修复,迭代l的副本,如'for x in l [:]:' –
您可以使用'sorted()' –