【问题标题】:How do I take a list and print all of the content in a random order, printing each exactly one time in python? [duplicate]如何获取列表并以随机顺序打印所有内容,在 python 中准确打印一次? [复制]
【发布时间】:2014-03-02 06:29:17
【问题描述】:
这就是我所拥有的:
>>> import random
>>> chars = [1, 6, 7, 8, 5.6, 3]
>>> for k in range(1, len(chars)+1):
... print random.choice(chars)
... chars[random.choice(chars)] = ''
...
但是当我运行它时,
5.6
1
5.6
8
>>>
我不希望它随机打印每个内容,我希望它以随机顺序打印所有内容一次。为什么要打印空格?
【问题讨论】:
标签:
python
python-2.7
for-loop
random
【解决方案1】:
试试这个:
import random
chars = [1, 6, 7, 8, 5.6, 3]
r = chars [:] #make a copy in order to leave chars untouched
random.shuffle (r) #shuffles r in place
print (r)
【解决方案2】:
import random
chars = ['s', 'p', 'a', 'm']
random.shuffle(chars)
for char in chars:
print char
这将在原地随机化列表。
【解决方案3】:
list = [1, 6, 7]
random.shuffle(list)
for k in range(1,len(list)+1):
print list[k]
【解决方案4】:
这是您的代码的工作版本。
import random
chars = [1, 6, 7, 8, 5.6, 3]
for k in range(1, len(chars)+1):
thechar = random.choice(chars)
place = chars.index(thechar)
print thechar
chars[place:place+1]=''
当您在print random.choice(chars) 和chars[random.choice(chars)] = '' 中执行两次random.choice 时,它会从chars 中选择另一个随机选项。相反,将random.choice 设置为某个值,以便您以后可以调用它。即使您已经这样做了,当您设置chars[random.choice(chars)] = '' 时,它只会将该位置设置为'',它不会删除它。所以如果你的random.choice 是5.6,那么chars 列表就会变成[1, 6, 7, 8, '', 3],而不是[1, 6, 7, 8, 3]。为此,您必须保存字符的位置,然后执行chars[place:place+1]。最后,由于for 语法,您必须执行len(chars)+1,这样它只会转到len(chars)。