【问题标题】:Random.randint on lists in PythonPython 列表中的 Random.randint
【发布时间】:2016-02-27 19:38:52
【问题描述】:

我想创建一个列表并用 15 个零填充它,然后我想将列表的 5 个随机点中的 0 更改为 1,所以它有 10 个零和 5 个,这是我尝试过的

import random, time

dasos = []

for i in range(1, 16):
  dasos.append(0)

for k in range(1, 6):
  dasos[random.randint(0, 15)] = 1

有时我会得到 0 到 5 个,但我想要 5 个, 如果我添加:

print(dasos) 

...查看我的清单:

IndexError: list assignment index out of range

【问题讨论】:

  • 或许你可以使用random.sample
  • 使用randrange(0, 15)randint(0, 14)
  • 正如@Gassa 所说,random.sample(range(15), 5) 将为您提供 0 到 14 之间的 5 个唯一数字。
  • 另一种方法是首先将所有可能的索引保存在循环之外(例如canditates = range(15)),用random.shuffle(candidates) 打乱这个列表,然后使用前5个数字作为你的索引。

标签: list python-3.x random


【解决方案1】:

我认为最好的解决方案是使用random.sample

my_lst = [0 for _ in range(15)]

for i in random.sample(range(15), 5):
    my_lst[i] = 1

您也可以考虑使用 random.shuffle 并使用前 5 个条目:

my_lst = [0 for _ in range(15)]
candidates = list(range(15))
random.shuffle(candidates)

for i in candidates[0:5]:
    my_lst[i] = 1

TL;DR:阅读 Python random documentation,这可以通过多种方式完成。

【讨论】:

  • 我没有提出任何这些建议,因为显然这只会对 OP 造成混淆,这对于编程来说显然是非常新的。在我看来,列表理解之类的东西对于学习编程来说是非常可怕的。我的解决方案可能不是故意的,但它对初学者来说更直观。
  • 如果你真的想学习如何为当今的计算机编程,那就学习 C。
  • 请注意,random.choice 实现与提问者的原始代码存在相同的问题:它可能会多次选择相同的索引。 shuffle 解决方案还需要调整以在 Python 3 中工作,其中 range 返回一个非列表可迭代对象。使用candidates = list(range(15)) 确保您获得可以随机播放的实际列表。
  • @Blckknght 感谢 cmets。我“确定”random.choice 弹出了元素,但显然我的记忆错了 :-) 另外我没有注意到问题是关于 Python 3,所以谢谢你通知我。
  • @nbro OP 已经在他的代码中使用了来自random 库的方法。指出他使用了错误的方法显然是正确的,而不是试图将与他选择的方法相匹配的东西一起破解。
猜你喜欢
  • 1970-01-01
  • 2021-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-24
  • 1970-01-01
  • 2015-09-04
相关资源
最近更新 更多