这目前适用于我尝试做的事情(其中'我是这个数字,我正在检查它是否在数字' ):
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 ...]
任何人都可以对此问题提供一些见解吗?
答案 0 :(得分:3)
现在你的方式没有任何问题。只是想指出这一点。如果您只想在一行中尝试这样做,那么this解决方案可能正是您所需要的。
但要回答你的理解问题:
我有两个问题在这里,我想指出。
您不应通过尝试将其转换为str
来检查字符串中是否有数字。只需对正在检查的角色使用isdigit。
您无法按照尝试使用它的方式使用理解。您需要了解的理解是,您正在创建一个新列表并获取该新列表并将其分配给变量(在您的情况下为count
)。所以这样做:
count = [count + 1 ....]
真的没有多大意义。
如果你想在理解中做到这一点,你应该做些什么,
对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