【问题标题】:How to find out whether a list contains any letters如何找出列表是否包含任何字母
【发布时间】:2014-08-02 04:11:10
【问题描述】:

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

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 以查询列表是否包含任何字母。如果您能帮我找出答案,我将不胜感激。

【问题讨论】:

  • '+'.isalpha() 实际上是 False,因为它不是 alpha,例如 [a-zA-Z]
  • @JoranBeasley 谢谢我编辑了。
  • 我也知道它可能不是你真正的变量名......但你永远不应该将你的变量命名为 listintfloat,甚至在(也许特别是) 示例 sn-ps ...至少将其命名为 my_listmy_int 或其他名称...不要隐藏内置函数

标签: python list letter


【解决方案1】:
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)

【讨论】:

    【解决方案2】:

    您需要另一个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 返回的每个字符串并遍历其字符。

    【讨论】:

      【解决方案3】:

      您可以使用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
      

      所以选择其中一个很大程度上是个人喜好

      【讨论】:

        猜你喜欢
        • 2022-01-16
        • 2012-02-22
        • 1970-01-01
        • 1970-01-01
        • 2023-03-27
        • 1970-01-01
        • 2012-03-07
        • 1970-01-01
        相关资源
        最近更新 更多