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

关于Python字符串唯一性校验函数及无内容if语句的技术疑问咨询

2. Python字符串唯一性校验函数的疑问解答

先把对应的函数代码贴出来方便参考:

def unique(string):
    if len(string) > 128:
        return False
    char_set = [False for _ in range(128)]
    for char in string:
        val = ord(char)
        if char_set[val]:
            return False
        char_set[val] = True
    return True

(1)第10行代码是否为else语句?若不是,其作用是什么?

这行代码不是else语句,它是函数在for循环正常结束后执行的return语句。

解释一下:当for循环完整遍历完字符串的所有字符,中途没有因为发现重复字符而提前return False,就说明字符串里的所有字符都是唯一的。这时候函数就返回True,告诉调用者这个字符串符合“所有字符唯一”的条件。

(补充:Python确实支持for...else语法,但这里的return True和for没有绑定,是独立的顶层语句哦。)

(2)第8行代码是否表示当char_set[val]为True时返回False?通常是否采用此种写法?

没错,这行代码的逻辑就是:如果char_set[val]已经是True,说明这个字符之前已经在字符串里出现过了,于是立刻返回False(表示字符串存在重复字符)。

这种写法非常常见,属于提前终止优化——一旦发现不符合条件的情况,马上结束函数,不用继续遍历剩下的字符,能有效提升代码的执行效率。在类似的校验场景(比如查重、找符合条件的元素)中,这种“尽早返回”的写法是行业惯例,大家都这么写~

(3)第5行的[False for _ in range(128)]代码的作用是什么?

这行代码是创建一个长度为128的列表,每个元素的初始值都是False。

为什么是128?因为标准ASCII字符集正好包含128个字符(从0到127的ASCII码)。这个列表的作用是记录每个ASCII字符是否已经出现过:

  • 列表的索引对应字符的ASCII码值(通过ord(char)获取)
  • 当某个字符第一次出现时,我们把列表对应索引的位置设为True;如果后续再遇到同一个字符,就能通过检查列表对应位置的值,快速判断出这个字符已经重复了。

这种用列表做标记的方式,能让我们以O(1)的时间复杂度完成字符重复检查,整个函数的时间复杂度是O(n)(n是字符串长度),效率很高。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 03:32:33