我有一个包含大字符串的文件,我需要对每一个字符串进行加扰。 这是我的代码的一部分,它进行加扰。
for line in filein:
zzz = line.strip('\n').split()
yyy = list(zzz)
random.shuffle(yyy)
zzzz = ''.join(yyy)
fout.write(zzzz + '\n')
我在网上找到了这样的东西,所以试着在这里使用它。 除了原始文件和应该包含加扰行的文件......是相同的。
但是,如果我说复制其中一行,并直接在python解释器中执行此操作...
>>>import random
>>>zzz = "..." ###(one of my large strings would go here, for sake of space didn't put it in)
>>>yyy = list(zzz)
>>>random.shuffle(yyy)
>>>zzzz = ''.join(yyy)
>>>zzzz
打印出的字符串是我原始字符串的加扰版本。我忘了做一些非常简单和愚蠢的事情吗?还是我错过了重要的事情?
答案 0 :(得分:5)
line.split
返回一个长度仅为1个元素的列表(行本身),因为您的数据可能没有穿插其中的空格。然后你把它变成一个列表(除了做一个浅的副本之外什么也没做)所以你最终洗牌长度为1的列表 - 这导致了一个不那么随机的结果: - )。
解决方法是摆脱split
:
for line in filein:
zzz = line.rstrip('\n')
yyy = list(zzz)
random.shuffle(yyy)
zzzz = ''.join(yyy)
fout.write(zzzz + '\n')