“创建一个名为 names.txt 的文本文档,其中包含 20 个名称的列表,每个名称各占一行。编写一个程序从 names.txt 中读取名称,然后生成一个名为 shuffle.txt 的文件,其中包含这些名称以随机顺序列出。(不要使用 .shuffle() 列表方法)”
这就是被问到的问题。我的代码在下面,我很难过。有什么建议吗?
顺便说一句:在我知道新文件打印正确后,我会制作新文件。
import random
my_file=open('C://names.txt','r')
name=my_file.read()
my_list=name.split(",")
for names in my_list:
my_list=random.randint(0,20)
print my_list
最佳答案
下面是 random.shuffle()
的正确实现:
items = ['a', 'b', 'c', 'd'] # any list
for i in range(len(items)):
j = random.randrange(i, len(items))
items[i], items[j] = items[j], items[i]
一些风格指南会告诉你使用 enumerate()
而不是 range(len(...))
,但在这种情况下它实际上并没有代码更好。
该算法的工作原理是将列表分为两个分区:左侧最初为空的分区和右侧的第二个分区。每次循环,我们从右分区中随机选择一个元素,将其与右分区最左边的元素交换,然后将边界移过去。
使用我们的列表 [1, 2, 3, 4]
,这是一个运行示例:
- 左边的分区是空的。将列表可视化为
[] + ['a', 'b', 'c', 'd']
random.randrange(0, 4)
返回0
。- 将
'a'
与元素零交换,元素零恰好也是'a'
。 - 列表现在是
['a'] + ['b', 'c', 'd']
。 random.randrange(1, 4)
返回3
。- 将
'b'
与元素 3 交换,即'd'
。 - 我们现在有
['a', 'd'] + ['c', 'b']
。 random.randrange(2, 4)
返回 2。- 将
'c'
与元素 2 交换,元素 2 恰好是'c'
。 - 我们有
['a', 'd', 'c'] + ['b']
。 random.randrange(3, 4)
只能返回 3。- 用自身交换
'b'
。 - 我们的最终结果是
['a', 'd', 'c', 'b']
。
关于python - 洗牌的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26963234/