【问题标题】:Better Way to Check if Values are in a List?检查值是否在列表中的更好方法?
【发布时间】:2019-10-23 03:31:35
【问题描述】:

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

  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

我觉得必须有更好的方法来做到这一点,但我不确定它是什么。 谢谢。

【问题讨论】:

  • 将名称为颜色的变量保存在dict:{'white': 0, 'gold': 0, ...} 中。然后使用第二个 for 循环检查列表中的每个键并将值增加 1。

标签: python list loops optimization


【解决方案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】:

    我认为您正在寻找的是Counter。 它返回一个包含名称和次数的字典

    from collections import Counter
    d = Counter(wordList)
    

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2022-09-22
        • 1970-01-01
        • 1970-01-01
        • 2022-06-06
        • 2014-06-01
        • 2018-01-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多