列表中的随机元素 - Python

时间:2014-04-27 12:47:35

标签: python random while-loop

所以我的函数 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 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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

答案 2 :(得分: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是list comprehension