【问题标题】:Shuffle not shuffling the first item in a list随机播放不随机播放列表中的第一项
【发布时间】:2014-04-02 09:37:42
【问题描述】:

我已经想出了如何打乱列表,但该函数似乎打乱了除原始第一项之外的所有内容。

我的代码:

from random import shuffle

x = list(range(10))
print x

k = 0
while k < len(x):
    for i in x:
        shuffle(x)
        print i
        k = k + 1

我在 while 循环中使用 for 循环的原因是我希望通过列表的迭代最终结束,我不确定这是否可以在 for 循环本身内完成。

运行代码将打印原始列表,然后打印 10 份,每份都是列表中的一项。打印的第一项始终为 0,或者换句话说,它始终是原始列表中的第一项。我无法弄清楚为什么会发生这种情况,可能是因为在调用 shuffle 函数之前该项目已经被“选中”。如果是这种情况,在 for 循环之前打乱列表会导致列表仅打乱一次,而不是在打印每个项目后打乱。

有人知道我如何在第一个项目被打印之前对其进行洗牌吗?谢谢!

【问题讨论】:

  • shuffle 将整个列表打乱。你为什么要洗很多次而不是一次?
  • 我正在尝试创建一个脚本来练习词汇卡,每个单词卡都是由单词及其定义组成的元组。通过在读取每张“卡片”后洗牌,我可以避免将卡片设置为模式。
  • 谢谢@thefourtheye!这似乎行得通!

标签: python list python-2.7 random shuffle


【解决方案1】:

随便用

shuffle(x)
for item in x:
    print item

没有while 循环。没有改组。就像使用真正的闪存卡一样,洗牌一次,然后按照洗牌得到的顺序展示卡片。

您在第一次迭代时看到了您的错误

for i in x:
    shuffle(x)
    print i
    k = k + 1

i 在随机播放之前分配。在下一次迭代之前,它不会使用打乱顺序。

【讨论】:

  • 然而,我使用 while 循环的原因是,我可以在使用 list.remove(item) 的同时继续循环遍历列表,从而通过一系列遍历来缩减列表。
猜你喜欢
  • 2023-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-29
  • 1970-01-01
  • 2012-03-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多