-2 python
假设我有一个列表,其中包含 [0, 1, 2, 3 , 4, 5, 6] 。我想删除那些大于或等于 3 的元素并将这些删除的元素添加到列表的开头。所以我写了下面的代码:
list = [0, 1, 2, 3, 4, 5, 6]
new_list =[]
for number in list:
if number >= 3:
dropped_number = list.pop()
new_list.append(dropped_number)
new_list.sort()
new_list += list
print(new_list)
Run Code Online (Sandbox Code Playgroud)
但是,当我运行代码时,结果显示为 [5, 6, 0, 1, 2, 3 , 4]。谁能向我解释一下我在这里做错了哪一步?
您的代码有两个问题。
您也不需要每次添加时都对 new_list 进行排序,您可以在最后进行一次,但这只是优化。
代替 for 循环,您可以使用带有 key 参数的 sort 方法,该方法返回一个布尔值,指示不满足您的条件的元素(即将向右移动)的 True 。因为 Python 的排序是稳定的,这只会将元素放在两个组中,而不会改变它们的相对顺序。
L = [0, 2, 4, 6, 1, 3, 5]
L.sort(key=lambda x: not x>=3)
print(L) # [4, 6, 3, 5, 0, 2, 1]
Run Code Online (Sandbox Code Playgroud)
如果您需要更程序化的解决方案,您可以将两个列表中的值分开,最后粘在一起:
L = [0, 2, 4, 6, 1, 3, 5]
left,right = [], []
for x in L:
if x >= 3: left.append(x)
else: right.append(x)
L = left + right
# [4, 6, 3, 5, 0, 2, 1]
Run Code Online (Sandbox Code Playgroud)