【问题标题】:Not able to append elements in python list无法在 python 列表中追加元素
【发布时间】:2018-11-14 11:52:27
【问题描述】:

我正在编写一个程序,使用 python 在给定的字符串中查找出现最多奇数次的字符。但是,如果两个或更多字符出现最大奇数次,我无法将字符附加到列表中。

使用的输入:AAAbbccc

我得到的错误:

Traceback(最近一次调用最后一次): 文件“./prog.py”,第 18 行,在 AttributeError: 'str' 对象没有属性 'append'

inputString = input()

dict = {}

for i in inputString:
  if i in dict:
    dict[i] += 1
  else:
    dict[i] = 1


print(dict)
max = -1
lst = []
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 = i

print(lst)

【问题讨论】:

  • 在第 21 行你有一个分配 'lst' 到 'i' 这不是一个数组,然后当第 18 行发生时 lst 不再是一个数组所以它没有附加方法
  • 谢谢,但这不是完全正常工作的问题,我在“lst.append(i)”行出现错误,我试图将字符附加到列表中,但我得到了上面的提到的错误

标签: python string python-3.x list counter


【解决方案1】:

您的代码存在一些问题:

  1. 不要在内置函数之后命名变量(即使作为示例)。使用ddict_ 而不是dict。同上max
  2. 您的max(固定为-1)将始终&lt;= dict[i],因为计数始终为&gt;= 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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-14
    • 2014-08-15
    • 2014-05-09
    • 1970-01-01
    • 2016-05-09
    • 2020-11-11
    相关资源
    最近更新 更多