我有一个列表,如果它包含任何字母,我试图获得错误的返回。当我到达如下列表时:
list = ['1', '+', 'b1']
我尝试运行
any(characters.isalpha() for characters in list)
但它返回False,即使list [2]显然包含一个字母。
所以我尝试执行以下操作,认为我可能没有正确迭代列表中的每个项目:
for characters in list:
any(characters.isalpha() for char in characters)
返回
False
False
False
我不知道如何让程序获取有一个字母并返回True以查询列表是否包含任何字母。如果你能帮助我找到答案,我会非常感激。
答案 0 :(得分: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)
答案 1 :(得分:3)
您需要另一个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
返回的每个字符串并迭代其字符。
答案 2 :(得分: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
所以挑选一个或另一个主要是个人偏好