2012-01-29 202 views
2

给定颜色= [“红色”,“蓝色”,“绿色”,“黄色”,“紫色”,“橙色”,“白色”,“黑色”] 生成并打印50个随机颜色的列表。你将需要使用随机模块来获得随机数。使用范围和地图生成所需数量的数字。然后使用地图将数字转换为颜色。打印结果。如何在python中生成50个随机颜色的列表?

这是我一直在考虑一个问题,这是我到目前为止的代码

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

number=random.randint(1,9) 

number.range(50) 

我假设这已经提出,挑选1-9之间的随机数的变量,然后将它们使得50 ?我现在需要一些连接数字和颜色的方法..我知道这个问题很模糊,但如果任何人都可以指向正确的方向,那就太棒了!

回答

1

由于某种原因,您的问题需要使用map。没有直接给出答案就很难帮助解决这个问题,特别是因为这些操作是单线的。要开始使用地图和范围,以获得需要的范围内的随机号码的清单:

>>> 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] 

观察该参数拉姆达,不使用x。这是我至少不会在这里使用地图的一个原因。然后,使用号码列表,索引功能映射到数字来获得的颜色列表:

>>> 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(),是迄今为止确定的最佳途径答案。

+0

多数民众赞成在完美的,我同意其他方式要容易得多,但显然这是我需要的方式!感谢您的帮助 ! – 2012-01-29 23:25:16

1

您可以使用一个简单的列表理解为这样的:

[ colour[random.randint(0,len(colour)-1)] for x in range(0,50) ] 

colour[i]意味着在colour列表中i个元素。根据您的建议,从0到列表的长度减1,创建一个随机整数len(colour)-1,其中random.randint。这与range(1,50)重复50次。列表理解中的虚拟迭代器值x被忽略。

希望这会有所帮助!

+0

有'random.choice'确切的东西......而'range(1,50)'只有49个选择。 – Gandaro 2012-01-29 23:11:11

+0

@Gandaro好点! – danr 2012-01-29 23:16:33

5

你需要的是使用random.choice(seq) 50次通过它colour列表作为参数。

像这样:从seq随机选择的元件

rand_colours = [random.choice(colour) for i in range(50)] 

random.choice(seq)回报。

+0

不错!是否有一些与Haskell的'replicate'和'replicateM'等价的表达式多次计算并返回结果列表? – danr 2012-01-29 23:03:39

+0

@danr我不认为有直接的等价物。 [python教程](http://docs.python.org/library/itertools.html#itertools.starmap)给出了一个如何使用'itertools.starmap'重复函数调用n次的例子。它甚至在'repeatfunc'中使用'random.random'。无论如何,它看起来使用'for'是最简单的方法。 – soulcheck 2012-01-29 23:30:46