通过列表推导Python将值插入到排序列表中

时间:2017-02-03 20:08:08

标签: python

我有一个使用list comprehension为排序列表添加值的赋值。我不允许导入模块,只有列表理解,最好是单行。我不允许创建函数并使用它们。 我完全陷入了这个问题的黑暗中。希望有人可以提供帮助:)

编辑:我不需要改变当前列表。事实上,我现在正在使用.pop尝试我的解决方案,我需要创建一个新列表,并正确添加元素,但我仍然无法弄清楚。

2 个答案:

答案 0 :(得分:3)

try:
    sorted_a.insert(next(i for i,lhs,rhs in enumerate(zip(sorted_a,sorted_a[1:])) if lhs <= value <= rhs),value)
except StopIteration: 
    sorted_a.append(value)

我猜......

使用您的新问题陈述

 [x for x in sorted_a if x <= value] + [value,] + [y for y in sorted_a if y >= value]

你当然可以提高大O的复杂性

答案 1 :(得分:1)

为了平分列表,您可以使用bisect.bisect (对于将来引用答案的其他读者)

>>> from bisect import bisect

>>> my_list = [2, 4, 6, 9, 10, 15, 18, 20]
>>> num = 12

>>> index = bisect(my_list, num)
>>> my_list[:index]+[num] + my_list[index:]
[2, 4, 6, 9, 10, 12, 15, 18, 20]

但由于您无法导入库,因此您可以将sumzip列表理解表达式一起使用:

>>> my_list = [2, 4, 6, 9, 10, 15, 18, 20]
>>> num = 12

>>> sum([[i, num] if i<num<j else [i] for i, j in zip(my_list,my_list[1:])], [])
[2, 4, 6, 9, 10, 12, 15, 18]