将整数转换为字符串以添加到Python字典中的方法
我昨天刚开始学习Python。我的任务是随机生成5种颜色,从
c=["red", "blue", "green", "yellow", "purple", "orange", "white", "black"]
所以我使用了
random.choice(c)
如果要创建一个包含50个颜色的列表,我本来想创建一个函数,然后用map()把它加进去,使用一个函数来添加随机颜色,并通过range(1,51)来循环。
这样就可以把数字1、2、3、4等等换成随机选的颜色。
我不知道怎么把数字变成random.choice(c)的结果,所以我想知道在map中可以用什么函数,比如说
print map('function', range(1,51))
我考虑过用lambda,比如
>>> sums = lambda x:(x-x)+(random.choice(c))
>>> print map(sums,range(1,51))
但我得到了
Traceback (most recent call last):
File "<pyshell#15>", line 1, in <module>
print map(sums,range(1,51))
File "<pyshell#14>", line 1, in <lambda>
sums = lambda x:(x-x)+(random.choice(c))
TypeError: unsupported operand type(s) for +: 'int' and 'str'
显然这不行,因为我把一个整数加到了字符串上。
我在查找文档,但没有找到合适的东西。
有没有什么建议可以帮我?
2 个回答
4
你可以这样得到50种颜色:
>>> c = ["red", "blue", "green", "yellow", "purple", "orange", "white", "black"]
>>> for _ in range(50):
... random.choice(c)
...
...
'blue'
'red'
'yellow'
...
要生成50种颜色的列表,可以使用一种叫做列表推导式的方法:
>>> colors = [random.choice(c) for _ in range(50)]
>>> colors
['green', 'red', 'green', 'orange', 'orange', 'black', 'black', 'purple', 'red',
'black', 'yellow', 'yellow', 'white', 'purple', 'orange', 'white', 'red', 'gree
n', 'black', 'blue', 'orange', 'green', 'orange', 'blue', 'white', 'blue', 'oran
ge', 'black', 'orange', 'green', 'black', 'green', 'blue', 'orange', 'blue', 'gr
een', 'green', 'white', 'red', 'green', 'yellow', 'yellow', 'blue', 'orange', 'p
urple', 'green', 'black', 'yellow', 'black', 'red']
你也可以用 map
这样来做:
>>> map(lambda _: random.choice(c), range(50))
['purple', 'yellow', 'black', 'white', 'black', 'black', 'purple', 'red', 'blue'
, 'white', 'blue', 'white', 'yellow', 'yellow', 'white', 'blue', 'orange', 'whit
e', 'yellow', 'black', 'green', 'white', 'blue', 'blue', 'yellow', 'red', 'red',
'black', 'purple', 'blue', 'yellow', 'yellow', 'green', 'orange', 'purple', 're
d', 'orange', 'red', 'blue', 'green', 'purple', 'orange', 'red', 'white', 'orang
e', 'green', 'purple', 'white', 'green', 'green']
或者你甚至可以在 lambda
中省略 _
:
>>> map(lambda: random.choice(c), range(50))
在所有这些版本中,_
表示一个不被使用的变量。它可以是任何名字,比如 i
或 number
。比如在你的例子中,你其实并不想用 range
函数产生的那个数字。这是一种约定。
2
听起来你想给 map
提供一个函数,这个函数会忽略传给它的参数,生成一个完全独立的值。其实,你可以使用一个带参数的 lambda 函数,即使这个参数在表达式中根本没有被用到。你不需要用 (x-x) 这种方式来绕过解释器。
sums = lambda x: random.choice(c)
print map(sums, range(1,51))