Невозможно добавить элементы в список Python - PullRequest
0 голосов
/ 14 ноября 2018

Я пишу программу, чтобы найти символ, который встречается максимальное количество нечетных раз, в заданной строке, используя 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)

1 Ответ

0 голосов
/ 14 ноября 2018

Есть некоторые проблемы с вашим кодом:

  1. Не называйте переменные после встроенных модулей (даже в качестве примера). Используйте d или dict_ вместо 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

Решение предполагает допустимое нечетное число , существует ли в вашей строке. Если это не так, и вам нужно применить специальную обработку, вам нужно добавить дополнительную логику. Я оставляю это как упражнение.

...