我希望在列表中追加并排序
例如
num_list = [5, 10, 15, 20]
num_list.append(13)
num_list.append(17)
print(num_list)
[5, 10, 13, 15, 17, 20]
答案 0 :(得分:5)
如果您的列表已经排序,您可以直接插入正确的位置:这会插入并保持列表排在O(n)
。
(在评论中获得@AntonvBR的帮助)
def insert_sorted(seq, elt):
"""inserts elt at the correct place in seq, to keep it in sorted order
:param seq: A sorted list
:param elt: An element comparable to the content of seq
Effect: mutates the param seq.
Does not return a result
"""
idx = 0
if not seq or elt > seq[-1]:
seq.append(elt)
else:
while elt > seq[idx] and idx < len(seq):
idx += 1
seq.insert(idx, elt)
num_list = [5, 10, 15, 20]
insert_sorted(num_list, 21)
num_list
编辑:
您也可以使用模块bisect,并且可以更有效地执行相同操作:(在评论中对@stefan的信用)
import bisect
num_list = [5, 10, 15, 20]
bisect.insort(num_list, 17)
答案 1 :(得分:2)
只需使用bisect.insort()
功能:
import bisect
num_list = [5, 10, 15, 20]
bisect.insort(num_list, 13)
bisect.insort(num_list, 17)
print(num_list)
# [5, 10, 13, 15, 17, 20]
最差/平均情况O(n)
插入时间复杂且易于使用。
答案 2 :(得分:0)
您可以使用默认的sort
方法
num_list = [5, 10, 15, 20]
num_list.append(13)
num_list.append(17)
num_list.sort()
print(num_list)