gpt4 book ai didi

python - 有效地检查字符串是否由 Python 中的一个字符组成

转载 作者:IT老高 更新时间:2023-10-28 21:44:02 26 4
gpt4 key购买 nike

检查 Python 中的字符串 s 是否仅包含一个字符(例如 'A')的有效方法是什么?像 all_equal(s, 'A') 这样的东西会表现得像这样:

all_equal("AAAAA", "A") = True

all_equal("AAAAAAAAAAA", "A") = True

all_equal("AAAAAfAAAAA", "A") = False

两种看似低效的方法是:首先将字符串转换为列表并检查每个元素,或者使用正则表达式。有没有更有效的方法,或者这些方法是 Python 中最好的方法吗?谢谢。

最佳答案

这是迄今为止最快的,甚至比 count() 还要快几倍,只需用出色的 mgilson's timing suite 计时即可:

s == len(s) * s[0]

这里所有的检查都是在 Python C 代码中完成的:

  • 分配 len(s) 个字符;
  • 用第一个字符填充空格;
  • 比较两个字符串。

字符串越长,时间奖励就越大。但是,正如 mgilson 所写,它会创建字符串的副本,因此如果您的字符串长度为数百万个符号,则可能会成为问题。

从计时结果中我们可以看出,通常最快的解决任务的方法不会为每个符号执行任何 Python 代码。然而,set() 解决方案也完成了 Python 库的 C 代码内部的所有工作,但它仍然很慢,可能是因为通过 Python 对象接口(interface)操作字符串。

UPD:关于空字符串的情况。如何处理它很大程度上取决于任务。如果任务是“检查字符串中的所有符号是否相同”,则 s == len(s) * s[0] 是有效答案(没有符号表示错误,异常没问题)。如果任务是“检查是否只有一个唯一符号”,空字符串应该给我们 False,答案是 s and s == len(s) * s[0],或者 bool(s) 和 s == len(s) * s[0] 如果您更喜欢接收 bool 值。最后,如果我们把任务理解为“检查是否有不同的符号”,空字符串的结果是True,答案是not s or s == len(s) * s[0].

关于python - 有效地检查字符串是否由 Python 中的一个字符组成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14320909/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com