如何在Python中生成50个随机颜色的列表?
给定一个颜色列表:["红色", "蓝色", "绿色", "黄色", "紫色", "橙色", "白色", "黑色"],我们需要生成并打印出50种随机颜色。你需要使用随机模块来获取随机数字。可以用range和map来生成所需数量的数字。然后再用map把这些数字转换成颜色。最后打印结果。
这是我收到的一个问题,下面是我目前写的代码:
colour = [ "red", "blue", "green", "yellow", "purple", "orange", "white", "black" ]
number=random.randint(1,9)
number.range(50)
我假设这段代码创建了一个变量,可以在1到9之间随机选择数字,然后生成50个这样的数字?现在我需要一种方法把这些数字和颜色联系起来……我知道这个问题有点模糊,但如果有人能给我指个方向,那就太好了!
5 个回答
8
你需要做的是用 random.choice(seq)
这个方法调用 50 次,把 colour
列表作为参数传进去。
像这样:
rand_colours = [random.choice(colour) for i in range(50)]
random.choice(seq)
会从 seq
中随机选一个元素。
11
如果你想要生成n个随机的十六进制颜色,可以试试这个方法:
import random
get_colors = lambda n: ["#%06x" % random.randint(0, 0xFFFFFF) for _ in range(n)]
get_colors(3) # sample return: ['#8af5da', '#fbc08c', '#b741d0']
3
出于某种原因,你的问题需要用到 map
。要帮助你解决这个问题有点困难,因为这些操作通常只需要一行代码。首先,使用 map 和 range 来获取所需范围内的随机数字列表:
>>> nums = map(lambda x : random.randint(0,7), range(50))
>>> nums
[6, 6, 2, 4, 7, 6, 6, 7, 1, 4, 3, 2, 6, 1, 1, 2, 2, 0, 7,
3, 6, 1, 5, 2, 1, 2, 6, 0, 3, 0, 2, 6, 0, 6, 3, 5, 0, 7,
2, 5, 4, 1, 0, 0, 1, 4, 3, 3, 0, 3]
注意,传给 lambda 的参数 x
并没有被使用。这也是我不推荐在这里使用 map 的一个原因。接下来,利用这些数字,使用映射函数来处理这些数字,从而得到颜色列表:
>>> cols = map(lambda i: colour[i], nums)
>>> cols
['white', 'white', 'green', 'purple', 'black', 'white', 'white',
'black', 'blue', 'purple', 'yellow', 'green', 'white',
'blue', 'blue', 'green', 'green', 'red', 'black', 'yellow',
'white', 'blue', 'orange', 'green', 'blue', 'green', 'white',
'red', 'yellow', 'red', 'green', 'white', 'red', 'white',
'yellow', 'orange', 'red', 'black', 'green', 'orange', 'purple',
'blue', 'red', 'red', 'blue', 'purple', 'yellow', 'yellow', 'red',
'yellow']
soulcheck 提供的答案,使用 random.choice()
在列表推导中,是确定答案的最佳方法。