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

2024-09-21 14:06:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在尝试解决字符串是否平衡的问题(检查字符串是否具有相同数量的唯一字符,例如“ab”的“a”和“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"

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

我认为可以通过在第一个循环中锁定字母1的数字,然后更改字母2的数字,将其与字母1的数字进行比较,然后在每个交替循环中反之亦然(如果可能的话)。如果没有,有没有办法修复上面的代码,使其与所提到的逻辑一起工作

我知道这个问题的另一个解决方案,包括保持字母1的数量不变,而字母2的数量不变,并反复比较字母2的数量与字母1的数量不变。然而,如果上述建议的解决方案有效,我认为它比后者更有效,所以我很好奇有很多方法可以避免这个错误

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


Tags: of字符串代码innumberfor数量string
2条回答

备选办法:

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
    

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

这将有助于:

from collections import Counter

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

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

相关问题 更多 >

    热门问题