gpt4 book ai didi

python - 想改进这个脚本

转载 作者:太空宇宙 更新时间:2023-11-04 08:31:10 25 4
gpt4 key购买 nike

我正在审查我保存的一些脚本并遇到了这个特定的脚本;我觉得不需要使用所有小写/大写字母就可以改进它,有什么建议吗?我在考虑使用 str.lower,但不知道如何实现它

def all_but_not_numbs(s: str) -> int:
"""
>>> all_but_not_numbs('asd123')
3
>>> all_but_not_numbs('E.666')
2
"""

num_letters = 0

for char in s:
if char in 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.,':
num_letters = num_letters + 1
return num_letters

最佳答案

使用 str.lower,您可以将要测试的字符小写,这样就不需要大写字母了。 ., 的字符不受 lower 的影响。此外,将 sum 与生成器表达式一起使用可使您的代码更紧凑且(恕我直言)更具可读性。

>>> letters = "abcdefghijklmnopqrstuvwxyz,."
>>> s = 'E.666'
>>> sum(1 for c in s if c.lower() in letters)
2

或者您可以使用 ascii_lettersstring 模块中定义:

>>> import string
>>> letters = string.ascii_letters + ",."
>>> sum(1 for c in s if c in letters)
2

不过,在这两种情况下,in 检查都是线性的(O(k) 对于 k 个“好”字母)。对于这么短的字母列表,这应该不是问题,但要进一步改进它,您可以将 letters 转换为 set 以便 in 检查将是 O(1)。

>>> letters = set(letters)

关于python - 想改进这个脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52791223/

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