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

Python单行代码判断列表重复元素的替代实现方案咨询

问题

我已经编写了一个判断列表是否存在重复元素的函数:

def duplica(list_to_check):
    if len(set(list_to_check)) != len(list_to_check):
        print('there are duplicates inside the list')
        result = 0
    else:
        result = 1
    return result

测试代码print(duplica([1, 1, 2]))的输出为“there are duplicates inside the list”和0。现在想咨询是否存在使用单行代码(例如lambda或map)实现该功能的替代方式?

回答

当然有啦!你的核心思路(利用集合去重后对比长度)本身就很巧妙,我们可以把它改写成更简洁的单行实现,甚至能完美保留原函数的打印提示+返回值逻辑。下面给你几种实用的方案:

方案1:贴合原函数逻辑的单行lambda

如果想保留打印提示,同时返回0/1的结果,可以借助Python的短路特性实现:

duplica = lambda lst: (print('there are duplicates inside the list') or 0) if len(set(lst)) != len(lst) else 1

测试效果和原函数完全一致:

print(duplica([1,1,2]))  # 输出:there are duplicates inside the list \n 0
print(duplica([1,2,3]))  # 输出:1

这里print函数返回None,所以print(...) or 0会最终返回0,刚好匹配原函数的返回逻辑。

方案2:极简布尔值返回版

如果不需要打印提示,只是判断是否存在重复,还能更精简:

has_duplicates = lambda lst: len(set(lst)) != len(lst)

要是想把布尔值转换成0/1,套个int()就行:

duplica = lambda lst: int(len(set(lst)) == len(lst))

这个版本返回1代表无重复,0代表有重复,和原函数逻辑对齐。

另外还有一种更高效的写法(大列表场景下找到第一个重复就停止,不用全转集合):

has_duplicates = lambda lst: any(lst[i] in lst[:i] for i in range(1, len(lst)))

方案3:用map实现(仅作思路参考)

用map实现的话逻辑会绕一点,而且效率偏低(因为会多次遍历列表),但也能达成需求:

duplica = lambda lst: 0 if any(map(lambda x: lst.count(x) > 1, lst)) else 1

这种方法不推荐在大列表上使用,仅作为拓展思路参考。

内容的提问来源于stack exchange,提问作者max scender

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 18:42:47