0

大きな文字列を含むファイルがあり、それらのすべてをスクランブルする必要があります。これは、スクランブリングを行う私のコードの一部です。

    for line in filein:
        zzz = line.strip('\n').split()
        yyy = list(zzz)
        random.shuffle(yyy)
        zzzz = ''.join(yyy)
        fout.write(zzzz + '\n')

このようなものをオンラインで見つけたので、ここで使用しようとしました。元のファイルと、スクランブルされた行を含むはずのファイルが同じであることを除いて....

しかし、行の1つをコピーすると言い、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 に答える