如何确定列表是否包含任何字母

时间:2014-06-11 23:21:42

标签: python list letter

我有一个列表,如果它包含任何字母,我试图获得错误的返回。当我到达如下列表时:

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以查询列表是否包含任何字母。如果你能帮助我找到答案,我会非常感激。

3 个答案:

答案 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)

您可以使用anyall

执行此操作
>>> 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

所以挑选一个或另一个主要是个人偏好