【问题标题】:Random.shuffle surprisingly doesn't work inside loopRandom.shuffle 出人意料地在循环内不起作用
【发布时间】:2020-02-27 23:26:18
【问题描述】:

Random.shuffle 出人意料地在循环内不起作用,它总是产生相同的随机列表,但我需要按顺序排列 19 个 不同 列表:

for i in range(19):
    random.seed() #random.randint(1, 50)
    random.shuffle(candidates_random_list)
    random.seed()
    candidates_full_list.append(candidates_random_list)
print('candidates_full_list ----- \n\n ')
pprint(candidates_full_list)

我看到了很多教程,并且预计 seed() 会解决这个问题,但在我看来这是不当行为。每次运行都会随机播放,但不会循环播放。

【问题讨论】:

  • 您能否显示您对代码的期望以及您实际观察到的内容的最小输出?
  • 你可能很感兴趣:pynative.com/python-random-seed
  • random.shuffle() 将列表随机排列,您不会复制。因此,您只是多次附加同一个列表。
  • 很确定你可以摆脱那些random.seed() 行,你会很高兴

标签: python python-3.x random shuffle


【解决方案1】:

shuffle 是就地的,并且您的列表包含对同一列表的 19 次引用,而不是每次 shuffle 产生的单独列表。

改为存储随机列表的副本。

for i in range(19):
    random.shuffle(candidates_random_list)
    candidates_full_list.append(candidates_random_list[:])

【讨论】:

  • candidates_full_list += candidates_random_list不是更清楚吗?
  • 不,相当于candidates_full_list.extend(candidates_random_list);它将参数的元素添加到列表中,而不是参数本身。
  • 哦,是的,OP 在列表列表之后!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-19
  • 1970-01-01
  • 1970-01-01
  • 2014-10-14
相关资源
最近更新 更多