Move every element from list l to list p
我想以升序将每个元素从一个列表转移到另一个列表。这是我的代码:
1 2 3 4 5 6 7 | 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 | [1, 2, 3, 4, 5] [10, 6, 7, 8, 9] |
号
我不知道为什么中途停下来,请帮我一下……谢谢!
就这么做:
1 2 | p = sorted(l) #l = [] if you /really/ want it to be empty after the operation |
你行为不稳定的原因是你在迭代过程中改变了序列
如果你想修正你的方法,你可以:
1 | for x in l[:]: |
号
试试这个:
1 2 3 4 | p = [] while len(l) > 0: p.append(min(l)) l.remove(min(l)) |
使用
哎呀,我希望你的名单很短。否则,所有的min()操作将产生一段缓慢的代码。
如果您的列表很长,您可以尝试堆(如标准库中的heapq)、树(如:https://pypi.python.org/pypi/red-black-tree-mod)或treap(如:https://pypi.python.org/pypi/treap/)。
对于你所做的,我猜堆是很好的,除非你的故事中有你遗漏的部分,比如需要能够访问任意值,而不仅仅是最小值。
如果要保留原始的未排序数组,请使用l的副本。
查看此答案了解更多信息。https://stackoverflow.com/a/1352908/1418255