Python 洗牌-不洗牌列表中的第一项

Python 洗牌-不洗牌列表中的第一项,python,list,python-2.7,random,shuffle,Python,List,Python 2.7,Random,Shuffle,我已经知道了如何洗牌列表,但该函数似乎洗牌了除原始第一项以外的所有内容 我的代码: 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 来自随机导入洗牌 x=列表(范围(10)) 打印x k=0 当k

我已经知道了如何洗牌列表,但该函数似乎洗牌了除原始第一项以外的所有内容

我的代码:

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
来自随机导入洗牌
x=列表(范围(10))
打印x
k=0
当k
我在while循环中使用for循环的原因是我希望通过列表的迭代最终结束,我不确定这是否可以在for循环本身中完成

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

有人知道我如何在打印前洗牌吗?谢谢

只要使用

shuffle(x)
for item in x:
    print item
循环。没有改组。就像使用真正的闪存卡一样,洗牌一次,然后按照洗牌的顺序呈现卡

您看到了自己的bug,因为在

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

i
在随机播放之前分配。直到下一次迭代,它才使用洗牌顺序。

shuffle
洗牌整个列表。为什么你要把它洗牌很多次而不是一次呢?我正在尝试创建一个脚本来练习vocab卡片,每个卡片都是由一个单词组成的元组,然后是它的定义。通过在每一张“牌”被读取后洗牌,我可以避免将牌设置为一种模式。谢谢,@thefourtheye!这似乎奏效了!然而,我使用while循环的原因是,当我使用
list.remove(item)
时,我可以继续在列表中循环,从而通过一系列的传递来缩小列表。