0

我有一个包含大字符串的文件,我需要对它们中的每一个进行加扰。这是我的代码的一部分,它进行加扰。

    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

打印出来的字符串是我原始字符串的加扰版本。我是否忘记做一些非常简单和愚蠢的事情?还是我错过了一些重要的事情?

4

1 回答 1

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')
于 2013-01-28T18:49:04.193 回答