Python 3 - 检查数字中的数字是否具有理解力

时间:2016-03-11 01:53:02

标签: python python-3.x

这目前适用于我尝试做的事情(其中'我是这个数字,我正在检查它是否在数字' ):

if str(digit) in str(i):
    count += 1

但是,当我尝试使用if理解时,我得到的语法无效:

count = [count + 1 if str(digit) in str(i)]

我已经尝试了几种不同的方法,只使用[count + = 1 if if]和count = [count + 1 if if ...]

任何人都可以对此问题提供一些见解吗?

4 个答案:

答案 0 :(得分:3)

现在你的方式没有任何问题。只是想指出这一点。如果您只想在一行中尝试这样做,那么this解决方案可能正是您所需要的。

但要回答你的理解问题:

我有两个问题在这里,我想指出。

  1. 您不应通过尝试将其转换为str来检查字符串中是否有数字。只需对正在检查的角色使用isdigit

  2. 您无法按照尝试使用它的方式使用理解。您需要了解的理解是,您正在创建一个新列表并获取该新列表并将其分配给变量(在您的情况下为count)。所以这样做:

    count = [count + 1 ....]

  3. 真的没有多大意义。

    如果你想在理解中做到这一点,你应该做些什么,

    a中的每个字符进行迭代,对于每个字符,检查它是否为数字:

    [c.isdigit() for c in a]
    

    现在,完成上述部分。您的单词中的所有数字都将包含1的列表。下一步是sum所有事情。现在,需要注意的额外信息是,在调用此sum时,我们将丢失方括号,因为我们将改为使用所谓的{{3 }}

    所以,所有这些都说完了。您的最终解决方案是:

    a = "fjf7jjjf77773jf3j"
    
    
    print(sum(c.isdigit() for c in a))
    
    # outputs 7
    

答案 1 :(得分:1)

列表理解(带方括号)用于生成列表。但是,在您的情况下,您实际上并没有生成任何列表。但是,如果您尝试编写内联if,请尝试 -

count = count + 1 if str(digit) in str(i) else count

答案 2 :(得分:1)

您可以将character.isdigit()中的布尔值相加,其中字符是字符串中的每个字符。

考虑:

>>> s='abc123def456'
>>> [c.isdigit() for c in s]
[False, False, False, True, True, True, False, False, False, True, True, True]
>>> sum(c.isdigit() for c in s)
6

答案 3 :(得分:0)

我不确定你为什么要在这种情况下获得一个列表,因为在你的第一个例子中,你只是增加了一个名为count的整数变量。如果你正在寻找更细微的东西,你可以尝试使用这样的函数:

def count_letter_instance(string="", letter=""):
    return sum([1 for x in string if x == letter])

print(count_letter_instance("hello hello hello", "h"))
print(count_letter_instance("cat cat cat", "c"))

输出:

3
3