我有一个使用list comprehension为排序列表添加值的赋值。我不允许导入模块,只有列表理解,最好是单行。我不允许创建函数并使用它们。 我完全陷入了这个问题的黑暗中。希望有人可以提供帮助:)
编辑:我不需要改变当前列表。事实上,我现在正在使用.pop尝试我的解决方案,我需要创建一个新列表,并正确添加元素,但我仍然无法弄清楚。
答案 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]
但由于您无法导入库,因此您可以将sum
和zip
与列表理解表达式一起使用:
>>> 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]