【问题标题】:Counting words in a list计算列表中的单词
【发布时间】:2014-03-03 19:39:32
【问题描述】:

我正在尝试使用len() 计算列表中单词的频率,但它不起作用,我创建了一个汽车列表,然后使用随机我基本上打印汽车 20 次,所以随机正在创建20 辆随机汽车,但现在我试图计算每辆汽车被创建了多少次,但它不起作用,它只显示 5、20 次?

carslist =["aston martin", "nissan", "nobel", "Porsche", "merc"] 
randomGen = map(lambda x : random.randint(0,5), range(20))
cars= map(lambda i: carslist[i], randomGen)
print cars

#not working, trying to count how many times each car is being printed
lengths = map (lambda x: len(carsList), cars)
print lengths

【问题讨论】:

  • Python 2:map(lambda x: y, z)[y for x in z]
  • 我正在尝试使用 len 或 reduce 来实现
  • 好吧,不要。使用collections.Counter
  • mercford 在您的定义中是同一辆车吗?两个名字都有 4 个字符...
  • 另外,random.randint(a,b) 给出了从 a 到 b 的值。我认为您不想在 randomGen 中包含 5 作为可能的索引

标签: python map lambda


【解决方案1】:

我们会有一个列表:cars = ['nissan','nobel','nobel', 'porsche', 'merc', 'merc', 'porsche', 'aston martin']

解决此问题的一种方法是遍历列表。我们将初始化一个字典,carCounts,用于记录每辆车出现的次数

carCounts = defaultdict(int)
for car in cars:
  carCounts[car] += 1
print carCounts

【讨论】:

    【解决方案2】:

    使用Counter

    carslist = ["aston martin", "nissan", "nobel", "Porsche", "merc"] 
    randomGen = map(lambda x: random.randint(0, 4), range(20))
    cars = map(lambda i: carslist[i], randomGen)
    
    from collections import Counter
    lengths = Counter(cars)
    print lengths
    # Counter({'merc': 6, 'nissan': 4, 'nobel': 4, 'Porsche': 3, 'aston martin': 3})
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-19
      • 1970-01-01
      • 2013-12-25
      相关资源
      最近更新 更多