如何判断列表中是否包含字母

1 投票
3 回答
4490 浏览
提问于 2025-04-18 09:29

我有一个列表,我想检查里面是否有字母,如果有字母就返回假(False)。当我处理这个列表时:

list = ['1', '+', 'b1'] 

我尝试运行:

any(characters.isalpha() for characters in list)

但是它返回了假(False),尽管列表中的第2个元素明显包含一个字母。

所以我尝试了以下方法,想着可能没有正确检查列表中的每一个项目:

for characters in list:
  any(characters.isalpha() for char in characters)

结果是:

False
False
False

我现在不知道怎么让程序识别出有字母,并在询问列表是否包含字母时返回真(True)。如果你能帮我找到答案,我会非常感激。

3 个回答

0

你可以用 any 或者 all 来实现这个功能。

>>> all(character.isalpha() for item in alist for character in item)
False
>>> any(character.isalpha() for item in alist for character in item)
True
>>> ## if you want the same output as using any
>>> not all(character.isalpha() for item in alist for character in item)
True

顺便说一下,all 在这个相对较小的例子中运行得更快。

>>> import timeit
>>> timeit.timeit('not all(character.isalpha() for item in ["1", "+", "b1"] for character in item)', number=10000)
0.021654181380604598
>>> timeit.timeit('any(character.isalpha() for item in ["1", "+", "b1"] for character in item)', number=10000)
0.034381219301721444

不过,如果你改变顺序,这个情况就不一定成立了。

>>> timeit.timeit('not all(character.isalpha() for item in ["b1", "+", "1"] for character in item)', number=10000)
0.0663501940999538
>>> timeit.timeit('any(character.isalpha() for item in ["b1", "+", "1"] for character in item)', number=10000)
0.037434049209622344

所以选择用哪个主要还是看个人喜好。

3
for characters in letter:
  any(characters.isalpha() for char in characters)

你这里有个拼写错误,你可能是想说:

for characters in letter:
  any(char.isalpha() for char in characters)

而且,你可以把这两个循环合并成一个,放在一个生成器表达式里:

any(char.isalpha() for letters in list for char in letters)
4

你需要再加一个 for ... in ... 的循环,来逐个处理每个字符串里的字符:

>>> lst = ['1', '+', 'b1']
>>> any(char.isalpha() for string in lst for char in string)
True
>>>

for char in string 这个循环会拿到 for string in lst 返回的每个字符串,然后一个一个地遍历它里面的字符。

撰写回答