2016-10-03 2 views
0

У меня есть такой код:Как посчитать значения в списке Python 3

winners = [red, blue, yellow] 

player_1_guesses = [red, green, orange] 
player_2_guesses = [red, blue, orange] 
player_3_guess = [red, green, yellow] 

я хотел бы, чтобы подсчитать, сколько раз появляется каждое значение в winners по трем player_x_guesses спискам. Так что я бы ожидал увидеть что-то вроде:

totals = {'red': 3, 'blue': 1, 'yellow': 1} 

Я не совсем уверен, что этот вид анализа данных называется или даже, что Google, чтобы достичь того, чего я хочу (?).

Спасибо за любую помощь.

+0

Почему вы не держите ни одного словаря вместо отдельных переменных для догадок? – khajvah

+1

Вы можете использовать коллекцию 'Counter': https://docs.python.org/3/library/collections.html#collections.Counter – jobou

+1

Являются ли эти элементы списка строками? Если это так, вам нужно поместить их в кавычки. Что касается вашего фактического вопроса, я согласен с тем, что вы должны взглянуть на 'collections.Counter' –

ответ

5

Попробуйте сделать это:

all_guesses = player_1_guess + player_2_guess + player_3_guess 
dct = {i:all_guesses.count(i) for i in winners} 

выход:

{'blue': 1, 'yellow': 1, 'red': 3} 

Использование collections:

from collections import Counter 

dct = Counter(word for word in all_guesses if word in winners) 
+0

Спасибо, оба они будут работать. Что называется этой «темой», поэтому я могу исследовать ее больше, чтобы увидеть, как работает ваш код? –

+0

Первый из них называется «Понимание словаря», второй - только с использованием существующего модуля. –

0

Не уверен, что если я нарушение правил здесь, но мой подход был Найти "python сравнить строки массивов", и я получил это: Compare string with all values in array

У вас есть один список/массив строк, которые вы хотите сравнить с тремя другими списками/массивами.

Предполагая, что вы хотите знать, сколько игроков угадали правильный цвет и в правильном положении. Другими словами, player_1_guesses = [зеленый, красный, оранжевый] не будет считаться правильной догадкой для красного, потому что он не находится в первой позиции для вашего примера.

В моей голове, логика кода будет идти, как это (это не питон код, кстати!):

  1. получить победителей [0], что «красный»
  2. проверки победителей [0] против значений в player_n_guesses [0] и записать результат в переменной называется красным (например, если player_n_guesses [0] == победителей [0]: красный + = 1)

  3. использовать вложенные для петель пройти все, а затем составить свой итоговый список, используя формат.

Я ожидаю, что есть более эффективный способ, который непосредственно сравнивает матрицы - попробуйте найти «сравнение строк в строке python» или что-то в этом роде.

Смежные вопросы