Как сделать простой код в Pythoni c способом - PullRequest
0 голосов
/ 30 января 2020

У меня следующий код. Как видите, мои корни в C ++ есть. Как мне это изменить, чтобы код выглядел более Pythoni c? Я не ищу 1 лайнер; код должен быть проще для понимания.

from collections import Counter 

def mostCommon(lst): 
  if not lst:
    raise Exception("Empty data list, expecting list of ints!")
  common = Counter(lst).most_common(len(lst))
  common_elements = []
  common_elements.append(common[0][0])

  #Get max frequency of reoccurence 
  max_freq = common[0][1]
  for i in range(1, len(common) ):
    if common[i][1] >= max_freq:
      common_elements.append(common[i][0])

  return common_elements


print(mostCommon(lst = [-8, 100, 5, -100, 7, 2, -8, 9, 6, 9, 9, -8, 8, 8, 8]) )
print(mostCommon([]) )

Ответы [ 2 ]

1 голос
/ 30 января 2020

это небольшое отличие от @hilberts_drinking_problem, но основано на его ответе

from collections import Counter, defaultdict

def mostCommon(lst): 
    if not lst:
        return lst
    res = defaultdict(list)
    for k, v in Counter(lst).items():
        res[v].append(k)

    return res[max(res.keys())]
1 голос
/ 30 января 2020

Я бы go с чем-то вроде этого:

def mostCommon(lst): 
  # handle empty case
  if not lst:
    return lst

  ctr = Counter(lst)
  max_count = max(ctr.values())
  return [k for k, v in ctr.items() if v == max_count]

Если вы хотите, чтобы пустой список выдавал ошибку, вы можете удалить строки до ctr = Counter(lst). Также обратите внимание, что для этого не нужно сортировать уникальные значения, что означает, что среда выполнения имеет линейный размер lst.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...