在Python中推送列表中的项

2024-09-27 09:27:38 发布

您现在位置:Python中文网/ 问答频道 /正文

假设有一个[0, 3, 14, 0]的列表,我想把列表中的项目“推”到右角。所以列表将变成[0, 0, 3, 14]。因此,值大于0的项基本上会忽略0并替换其位置。数字可以是任何数字(0除外),因此排序将不起作用。几个例子:

  1. [0, 4, 0, 4]=>;[0, 0, 4, 4]
  2. [1, 0, 2, 2]=>;[0, 1, 2, 2]
  3. [13, 0, 0, 6]=>;[0, 0, 13, 6]

有没有一个有效的解决办法?我绞尽脑汁想了好几个小时,却找不到解决办法。你知道吗


Tags: 项目gt列表排序数字例子小时解决办法
3条回答

这可能不是最有效的解决方案:

dst_lst = [n for n in lst if n <= 0] + [n for n in lst if n > 0]

这将遍历原始列表两次,并创建两个临时列表和一个最终列表。你知道吗

希望这个例子有帮助!你知道吗

这里我们使用Python预定义的数据类型queue

>>> import queue
>>> t = queue.deque()
>>> for each in [0, 4, 0, 4]:
...     if each <= 0: t.appendleft(each)
...     else: t.append(each)
...
>>> t
deque([0, 0, 4, 4])

如果您想要一个高效的解决方案,而该解决方案并不适用,而且比排序更快,您可以这样做:

lst = [0,1,2,0]
helper = [0 for i in len(lst)]
counter = 0
for i in range(len(lst)-1,-1,-1):
    if lst[i]:
        helper[len(lst)-1-counter] = lst[i]
        counter += 1
print(helper)

相关问题 更多 >

    热门问题