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

标签 python string

检查 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/

相关文章:

python - 在 pandas DataFrame 中查找(仅)满足给定条件的第一行

python - YAML 加载 5e-6 作为字符串而不是数字

python - 使用子进程模块通过 SSH 连接 Linux 盒子

python - 如何让Pygame以不同的速度不断响应不同的按键?

Python 导入 : resolve conflict between current directory and external library

c# - 在 C# 字符串中通过 HTML 搜索特定文本并标记文本的最佳方法是什么?

c++ - 有没有更好的方法来排列字符串?

string - Oracle 中的日期月份名称语言?

javascript - 从包含字符串中每个单词的数组中提取索引

python - 为什么 '362' > 378?