列表中的随机元素 - Python
我写的这个函数RandList(n)本来是想返回一个包含n个元素的列表。但是当我运行它的时候,却得到了2 * n个元素的列表L。有人能帮我解决这个问题吗?谢谢大家!
import random
def randList(n):
counter = 0
L =[]
while counter < n:
L += str(random.randrange(0,100))
counter += 1
return L
print randList(1)
print randList(5)
print randList(10)
3 个回答
1
在比较(加、乘等)不同类型的数据时,一定要小心。
frostnational 和 sshashank124 解释了为什么你的代码出错了。
这里有两个更简短的解决方案(根据你的具体情况选择):
import random
lr = [random.randrange(0, 101) for i in range(n)] # has repetitions
lnr = random.sample(range(101), n) # has no repetition
注意,这些列表里没有字符串,但你可以很容易地调整代码。
另外,lr 是一个 列表推导式。
2
你应该使用 append
方法:
当你写 list += string
的时候,其实是在把字符串里的每个字符都当成单独的元素加到列表里。比如说,[] + 'hello' --> ['h', 'e', 'l', 'l', 'o']
,这样就变成了一个包含每个字符的列表。
正确的代码
import random
def randList(n):
counter = 0
L =[]
while counter < n:
L.append(str(random.randrange(0,100)))
counter += 1
return L
print randList(1)
print randList(5)
print randList(10)
2
当你执行 L += str(random.randrange(0,100))
时,Python解释器发现 str(random.randrange(0,100))
是一个可迭代的对象,也就是说它可以一个一个地取出里面的元素。因为这个对象是个字符串,所以它把字符串中的每个字符都添加到了 L
里。
你可以试试 L += [str(random.randrange(0,100))]
或者 L.append(str(random.randrange(0,100)))
。
最终代码:
def randList(n):
counter = 0
L = []
while counter < n:
L += [str(random.randrange(0,100))]
counter += 1
return L