繁体   English   中英

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

[英]Better Way to Check if Values are in a List?

我有以下代码遍历单词列表,并递增表示颜色的变量,如下所示:

  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

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

我认为您正在寻找的是Counter 它返回带有名称和数字出现的字典

from collections import Counter
d = Counter(wordList)

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

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

您可以使用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})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM