代码之家  ›  专栏  ›  技术社区  ›  Brody

在50种生成颜色的列表上使用地图,使用过滤器来计数,并减少出现的频率

  •  -1
  • Brody  · 技术社区  · 10 年前

    鉴于:

    c = ["red", "blue", "green", "yellow", "purple", "orange", "white", "black"]
    

    生成并打印50种随机颜色的列表。你需要 使用 random 要获取的模块 随机的 数字。

    使用 range map 生成 所需数量。

    然后使用 地图 将数字转换为颜色。然后使用 地图 超过要计数的颜色(使用 filter reduce len )多久一次 出现每种颜色。打印结果。

    这就是我目前所掌握的:

    import random
    colours = ['red', 'blue', 'green', 'yellow', 'purple', 'orange', 'white', 'black']
    nums = map(lambda x: random.randint(0,7), range(50))
    c = map(lambda y: colours[y], nums)
    

    当打印出来时,它会从给定的列表中为我提供所需的50种随机颜色。我有点困惑,不知从这里搬到哪里去。

    1 回复  |  直到 10 年前
        1
  •  0
  •   Aquiles    10 年前

    这一个也使用zip,所以你有一个正在计数的颜色的参考:

    zip(colours, map(lambda x: len(filter(lambda y: y==x, c)), colours))
    

    使用reduce计算元素的方法让我思考了一下,我发现唯一的方法是:

    map(lambda color: reduce(lambda x,y: x+y, map(lambda y: 1,filter(lambda x: x==color, c))), colours)