【问题标题】:Checking for a digit in a string - without loops and without libraries [duplicate]检查字符串中的数字 - 没有循环和没有库[重复]
【发布时间】:2019-03-09 13:21:31
【问题描述】:

我想要一个字符串,例如我想输入“我有 2 条狗”,如果字符串中显示了一个数字,我希望 shell 返回 True(一个函数可以)。 我发现在不使用任何循环且不使用任何“re”或“string”库的情况下很难编写代码。

有什么帮助吗?

例子:

input: "I own 23 dogs"
output: True

input: "I own one dog"
output: False

【问题讨论】:

  • 有什么理由不使用循环/字符串库?
  • 在我的学习中,他们还没有教给我们这个,所以我不想做任何事
  • @hansolo 使用 're' 库
  • return any(y.isdigit() for y in x)
  • 伙计们,他们还没有了解循环,所以你为什么建议生成器/列表理解?也就是说,这个问题很糟糕,很可能是一个骗局

标签: python


【解决方案1】:

列表理解可以帮助您:

def is_digit(string):
    return any(c.isdigit() for c in string)

print(is_digit("I own 23 dogs"))
print(is_digit("I own one dog"))

输出:

True
False

【讨论】:

    【解决方案2】:
    >>> a = "I own 23 dogs"
    >>> print(bool([i for i in a if i.isdigit()]))
    True
    
    >>> b = "I own some dogs"
    >>> print(bool([i for i in b if i.isdigit()]))
    False
    

    但是更好的解决方案是使用any 并使用生成器而不是列表以获得更好的性能(就像@Alderven 解决方案一样):

    >>> a = "I own 23 dogs"
    >>> any(i.isdigit() for i in a)
    True
    

    【讨论】:

    • 这构建了整个列表,当您可以与 any() 短路时不是一个好主意
    • @Chris_Rands 你是对的。我更新我的答案
    猜你喜欢
    • 1970-01-01
    • 2017-11-03
    • 1970-01-01
    • 1970-01-01
    • 2015-01-01
    • 2023-03-16
    • 2018-04-06
    • 1970-01-01
    • 2020-08-30
    相关资源
    最近更新 更多