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