为了账号安全,请及时绑定邮箱和手机立即绑定

无法在python列表中附加元素

无法在python列表中附加元素

30秒到达战场 2021-08-17 16:54:15
我正在编写一个程序,以使用 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个赞

您的代码存在一些问题:

  1. 不要在内置函数之后命名变量(即使作为示例)。使用ddict_代替dict。同上max

  2. 您的max(固定于-1)将始终<= dict[i],因为计数始终为>= 1

  3. 您定义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

该解决方案假定您的字符串中确实存在有效的奇数计数。如果不是,并且您需要应用特殊处理,则需要添加额外的逻辑。我把它留作练习。


查看完整回答
反对 回复 2021-08-17
  • 1 回答
  • 0 关注
  • 156 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信