我需要找到并计算一个字符串中可以找到多少个字符。我把字符分成了chars1[a:m]和chars2[n:z],并且有两个计数器。
输出应该是0/14,但应该是0/1。我认为它只检查是否包含一个且只有一个项,然后退出循环。是这样吗?
这是密码。
string_1 = "aaabbbbhaijjjm"
def error_printer(s):
chars1 = "abcdefghijklm"
chars2 = "nopqrstuvwxyz"
counter1 = 0
counter2 = 0
if ((c in s) for c in chars1):
counter1 += 1
elif ((c in s) for c in chars2):
counter2 += 1
print(str(counter2) + "/" + str(counter1))
error_printer(string_1)
尝试使用if条件递增,在s上使用一个循环
for循环的另一种选择:
在这里您可以计算出
"a"
,"b"
,"c"
的次数。。。在字符串输入中显示,然后对其进行总结。它仍然是低效的,但是利用了
string.count
和sum
函数,使它更容易阅读和理解正在发生的事情。chars1
/chars2
中出现在s
中的字符数这是有意义的,因为你在
if
条件下会增加。因为if
是而不是在一个循环中,所以可以增加一次。现在我们可以将生成器展开成一个
for
循环。这将解决问题的一部分,并生成0/6
:然而,这仍然不是非常有效:它需要O(n)最坏的情况来检查字符是否在字符串中。您可以先用字符串中的字符构造一个
set
,然后执行查找(一般情况下为O(1):现在我们已经提高了效率,但是它仍然不是很优雅:它需要大量的代码,而且必须检查代码才能知道它的功能。我们可以使用
sum(..)
构造来计算满足特定约束的元素数,如:这会产生
0/6
,因为[A-M]
范围中有6个字符出现在s
中,而[N-Z]
范围中有0个字符出现在s
中。s
中出现在char1
/char2
中的字符数但是,根据问题的主体,您希望计算出现在两个不同范围内的
s
中的字符数。另一个相关的问题是计算出现在
char1
/char2
中的字符数。在这种情况下,我们只需交换循环:这会产生
0/14
,因为s
中有14个字符出现在[A-M]
范围内(如果'a'
在s
中出现两次,则我们将其计数两次),并且s
中的任何字符都不会出现在[N-Z]
范围内。使用范围检查
由于我们使用的是范围,因此可以使用比较而不是元素检查,并使其与两个比较检查一起运行,例如:
相关问题 更多 >
编程相关推荐