首页 > 解决方案 > python中除零外的列表排序

问题描述

我有一个列表[5,3,0,0,4,1,4,0,7] ,我想以某种方式对列表进行排序,使零保留在它们的位置,而对其他的进行排序答案是这样的[1,3,0,0,4,4,5,0,7]

我写了这段代码,但我无法在他们的位置修复零

def except_zero(items: list) -> Iterable: 
    ans=[] 
    for i in range(len(items)): 
        if (items[i] != 0): 
            ans.append(items[i]) 
            ans = sorted(ans) 

    j = 0 
    for i in range(len(items)): 
        if (items[i] >= 0): 
            items[i] = ans[j] 
            j += 1 
            return ans

标签: pythonlistsorting

解决方案


你可以试试这个:

def sort_and_extract_non_zero_items(items: list) -> Iterable:
  return sorted([n for n in l if n != 0])

def replace_non_zero_items(original: list, non_zeroes: list) -> Iterable:
  return [non_zeroes.pop(0) if n != 0 else 0 for n in original]

non_zero_list = sort_and_extract_non_zero_items(items)

items = replace_non_zero_items(items, non_zero_list)

推荐阅读