列表中的随机元素 - Python

0 投票
3 回答
1634 浏览
提问于 2025-04-18 04:27

我写的这个函数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

撰写回答