检查值是否在列表中的更好方法?

时间:2019-06-07 15:39:52

标签: python list loops optimization

我有以下代码,这些代码贯穿单词列表并递增表示颜色的变量,如下所示:

  white = 0
  gold = 0
  silver = 0
  grey = 0
  lavender = 0
  pink = 0
  red = 0
  green = 0
  blue = 0
  #list of colors
  colors = ['white','gold','silver','grey','lavender','pink','red','green','blue']
  #increment color variables accordingly
  for i in wordList:
    if colors[0] in i:
      white+=1
    if colors[1] in i:
      gold+=1
    if colors[2] in i:
      silver+=1
    if colors[3] in i:
      grey+=1
    if colors[4] in i:
      lavender+=1
    if colors[5] in i:
      pink+=1
    if i == colors[6]:
      red+=1
    if colors[7] in i:
      green+=1
    if colors[8] in i:
      blue+=1

我觉得必须有更好的方法来执行此操作,但是我不确定它是什么。 谢谢。

3 个答案:

答案 0 :(得分:1)

我认为您正在寻找的是Counter。 该字典将返回具有名称和数字出现的字典

from collections import Counter
d = Counter(wordList)

现在d将具有您要查找的内容,您可以通过d.items()或仅d.values()对其进行迭代

答案 1 :(得分:1)

Python包含此问题的最佳数据结构,称为Counter

import collections
colors = ['white','gold','silver','grey','lavender','pink','red','green','blue']
counter = collections.Counter(colors)
print(counter)

结果

Counter({'white': 1, 'gold': 1, 'silver': 1, 'grey': 1, 'lavender': 1, 'pink': 1, 'red': 1, 'green': 1, 'blue': 1})

您可以按名称访问元素

> counter['white']
1

答案 2 :(得分:0)

您可以使用defaultdicts

from collections import defaultdict
colors_dict = defaultdict(int)
colors = ['white','gold','silver','grey','lavender','pink','red','green','blue']
wordList = ['lavender','gold','silver','waka','lavender','lavender']
for word in wordList:
    if word in colors:
        colors_dict[word] += 1
print(colors_dict)
  

defaultdict(<class 'int'>, {'silver': 1, 'lavender': 3, 'gold': 1})