【问题标题】:Scrambling lines from file in PythonPython中文件中的加扰行
【发布时间】:2013-01-12 04:49:40
【问题描述】:

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

    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

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

【问题讨论】:

    标签: python string scramble


    【解决方案1】:

    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')
    

    【讨论】:

    • 啊,感谢您的快速回答。但我认为根据您之前对我的问题的回答 split 返回一个字符串列表......所以 zzz 不应该是一个字符串吗?
    • @Joe 不,正如你所说,这将是一个字符串列表。
    • @Joe -- str.split 确实返回了一个字符串列表。但是,如果你有字符串"foobarbaz",那么拆分它会给你["foobarbaz"](一个包含1个字符串的列表)而字符串:"foo bar baz"拆分后将是["foo", "bar", "baz"](一个包含3个字符串的列表它)
    • 啊,所以我搞砸了,我没有告诉它查看 zzz[0]。对吗?
    • @Joe -- 我想这也行。我认为我上面发布的代码更健壮一些(例如,它仍然会在整个数据中散布空格的地方打乱行)
    猜你喜欢
    • 1970-01-01
    • 2015-06-21
    • 1970-01-01
    • 2017-03-22
    • 2011-10-27
    • 2020-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多