2016-10-03 54 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

这些列表项应该是字符串吗?如果是这样,你需要把它们放在引号中。至于你的实际问题,我同意jobou,你应该看看'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

第一个叫做Dictionary Comprehension,第二个只是使用现有的模块。 –

0

不知道如果我在这里打破了规则,但我的方法是搜索 “python比较字符串数组”,我得到这个:Compare string with all values in array

您有一个要与其他三个列表/数组进行比较的字符串列表/数组。

假设你想知道有多少玩家猜对了正确的颜色和正确的位置。换句话说,player_1_guesses = [绿色,红色,橙色]不会被视为红色的正确猜测,因为它不在第一个位置,例如。

在我的头上,你的代码会是这样的逻辑(这是不是顺便说一下Python代码!):

  1. 得到的赢家[0],这是“红色”
  2. 检查赢家[0]针对值player_n_guesses [0],并记录在一个变量被称为红色的结果(例如,如果player_n_guesses [0] ==赢家[0]:红色+ = 1)嵌套的for循环

  3. 使用通过一切,然后使用格式方法制作总计清单。

我期望有直接比较矩阵更有效的方法 - 尝试搜索“字符串矩阵比较蟒蛇”或类似的东西。