有没有办法让python交替地重新分配变量,同时交替地锁定一个变量



我目前正在努力解决一个字符串是否平衡的问题(检查一个字符串的唯一字符数是否相等,例如"ab"的"a"one_answers"b"的数量相等,因此它将返回"是",而"cdc"的"c"比"d"多1个,因此它会返回"否"(,我想到了一个需要一个交替变量的解决方案。

例如,在下面的代码中:

def balanced(string):
string_list = [x for x in string]
number_of_letter1 = 0
for letter in string_list:
current_letter = letter
for number in range(len(string_list)):
if string_list[number] == current_letter:
number_of_letter1 += 1
string_list.pop(number)
if number_of_letter1 != number_of_letter2:
return "No"
number_of_letter2 = number_of_letter1.copy()
number_of_letter1 = 0
return "Yes"

我试图计算字符串中出现的每个字母的数字,将我所在的当前字母分配给current_letter。然后我会计算字母出现的次数,并将number_of_tletter1增加1。下一步是问题的出现:(.我想让number_of_tletter2是number_of_Tletter1的副本,这样我就可以将(下一个循环中的新number_of.tletter1(与(上一个循环的number_of_eletter1,即number_of_vletter2(进行比较。但是,仅对于第一个循环,number_of_tletter2不存在,因此创建了赋值错误之前使用的变量。

我认为可以通过在第一个循环中锁定number_of_tletter1,然后更改number_of_Tletter2,将其与number_of_eletter1进行比较,然后在每个交替循环中反之亦然(如果可能的话(来解决。如果没有,有没有办法修复上面的代码,使其与上述逻辑一起工作?

我知道这个问题的另一个解决方案,包括保持number_of_tletter1恒定,而number_of_Tletter2是动态的,并反复比较number_of_eletter2和常量number_of_Eletter1。然而,如果上面提出的解决方案有效,我认为它会比后者更有效,所以我很好奇如何解决这个错误。

感谢大家抽出时间阅读!如果我对自己想法的任何解释都不那么清楚,我会尽力解释得更清楚。

这将起作用:

from collections import Counter
def balanced(string):
return len(set(Counter(string).values())) <= 1

collections.Counter收集单个迭代中所有字符的计数。然后测试有多少不同的计数。

替代方法:

def is_balanced(string):
if len(string)<1:
return False
unique_letters = set(string)
n_occurances = 0
for letter in unique_letters:
n_occurances_this = string.count(letter)
if n_occurances == 0:
n_occurances = n_occurances_this
elif n_occurances_this != n_occurances:
return False

return True

此代码在字符串中创建一组(唯一列表(字符,并检查每个字符的出现次数

最新更新