You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建无值但算作元素的列表项,排序时置于列表末尾

实现含无值占位元素的列表并保证排序时占位元素在末尾

核心需求实现

1. 创建无值占位元素

直接用Python的None作为无值占位符,它会被视为列表的合法元素,比如你需要的[1, 2, None]就对应你描述的[1,2,_]形式。

2. 排序时让占位元素排在末尾

通过自定义排序规则实现:给sort()方法传入key参数,将元素转换为元组(e is None, e)。因为布尔值False(对应非None元素)小于True(对应None元素),所以非None元素会按自身值排序在前,所有None元素统一排在末尾。

示例代码:

# 创建包含占位元素的列表
nums = [3, None, 1, 2, None, 5]
# 自定义排序
nums.sort(key=lambda e: (e is None, e))
print(nums)  # 输出: [1, 2, 3, 5, None, None]

对你提供的去重代码的分析与改进

你给出的removeDuplicates代码存在逻辑和功能上的问题:

  • 嵌套循环+中途排序会打乱索引,导致后续循环处理错误
  • 返回set(nums)不符合题目要求(题目通常要求返回有效元素个数,且set会丢失顺序并自动移除None)
  • 时间复杂度高,效率低下

改进后的代码(满足原地修改、去重、保留None占位且排序后None在末尾):

from typing import List

class Solution:
    def removeDuplicates(self, nums: List[int]) -> int:
        # 收集不重复的有效元素
        seen = set()
        unique_elements = []
        for num in nums:
            if num not in seen and num is not None:
                seen.add(num)
                unique_elements.append(num)
        
        # 统计原列表中的None数量并添加到末尾
        none_count = nums.count(None)
        unique_elements.extend([None] * none_count)
        
        # 排序保证None在末尾
        unique_elements.sort(key=lambda e: (e is None, e))
        
        # 原地修改原列表
        nums[:] = unique_elements
        
        # 返回去重后的有效元素个数(不含None)
        return len(seen)

测试示例:

sol = Solution()
test_nums = [1, 2, 2, 3, None, 1, None]
result_length = sol.removeDuplicates(test_nums)
print(test_nums)       # 输出: [1, 2, 3, None, None]
print(result_length)   # 输出: 3

内容的提问来源于stack exchange,提问作者KARTX LEGEND YT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 17:16:28