我正在编写一个程序,以使用 python 在给定的字符串中查找出现最多奇数次的字符。但是,如果两个或多个字符出现最多奇数次,我无法将字符附加到列表中。使用的输入:AAAbbccc我得到的错误:回溯(最近一次调用):文件“./prog.py”,第 18 行,在 AttributeError 中:'str' 对象没有属性 'append'inputString = input()dict = {}for i in inputString: if i in dict: dict[i] += 1 else: dict[i] = 1print(dict)max = -1lst = []for i in dict: if(dict[i]%2!=0 and max<=dict[i]): if(max == dict[i]): lst.append(i) else: max = dict[i] lst = iprint(lst)
1 回答
Cats萌萌
TA贡献1805条经验 获得超9个赞
您的代码存在一些问题:
不要在内置函数之后命名变量(即使作为示例)。使用
d
或dict_
代替dict
。同上max
。您的
max
(固定于-1
)将始终为<= dict[i]
,因为计数始终为>= 1
。您定义
lst
为一个列表,然后为其分配一个字符串。
更简单,使用collections.Counter
,计算最大值,然后max
与自定义函数一起使用:
from collections import Counter
inputString = input()
c = Counter(inputString)
print(c)
maxval = max(c.values())
def max_logic(x):
cond1 = x[1] % 2
cond2 = x[1] - maxval
return cond1, cond2
key, val = max(c.items(), key=max_logic)
示例运行:
print(key, val)
thisisateststring
Counter({'t': 4, 's': 4, 'i': 3, 'h': 1, 'a': 1, 'e': 1, 'r': 1, 'n': 1, 'g': 1})
i 3
该解决方案假定您的字符串中确实存在有效的奇数计数。如果不是,并且您需要应用特殊处理,则需要添加额外的逻辑。我把它留作练习。
添加回答
举报
0/150
提交
取消