如何在Python中生成50个随机颜色的列表?

6 投票
5 回答
28508 浏览
提问于 2025-04-17 11:54

给定一个颜色列表:["红色", "蓝色", "绿色", "黄色", "紫色", "橙色", "白色", "黑色"],我们需要生成并打印出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() 在列表推导中,是确定答案的最佳方法。

撰写回答