如何判断列表中是否包含字母
我有一个列表,我想检查里面是否有字母,如果有字母就返回假(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
返回的每个字符串,然后一个一个地遍历它里面的字符。