3

Python で文字列のリストをランダム化する最良の方法として、この回答を潜在的に読んだことがあります。次のコードを介して約3000万の要素のリストがあるため、それが最も効率的な方法であるかどうか疑問に思っています:

import json
from sets import Set
from random import shuffle

a = []

for i in range(0,193):
    json_data = open("C:/Twitter/user/user_" + str(i) + ".json")
    data = json.load(json_data)
    for j in range(0,len(data)):
        a.append(data[j]['su'])
new = list(Set(a))
print "Cleaned length is: " + str(len(new))

## Take Cleaned List and Randomize it for Analysis
shuffle(new)

より効率的な方法があれば、その方法についてアドバイスをいただければ幸いです。

ありがとう、

4

3 に答える 3

4

考えられるいくつかの提案:

import json
from random import shuffle

a = set()
for i in range(193):
    with open("C:/Twitter/user/user_{0}.json".format(i)) as json_data:
        data = json.load(json_data)
        a.update(d['su'] for d in data)

print("Cleaned length is {0}".format(len(a)))

# Take Cleaned List and Randomize it for Analysis
new = list(a)
shuffle(new)

  • これが速いかどうかを知る唯一の方法は、プロファイルを作成することです。
  • あなたはsets.Setを組み込みのset()に設定するのが好きですか?
  • with句を導入しました(ファイルが閉じられることを保証するため、ファイルを開くための推奨される方法)
  • セットに変換する以外は、リストとして「a」を使用して何かをしているようには見えませんでした。最初からセットにしてみませんか?
  • インデックスを反復処理してからインデックスをルックアップするのではなく、データ項目を反復処理するだけです...
  • これにより、ジェネレータ式として簡単に書き換えることができます
于 2011-01-08T03:09:56.017 に答える
2

シャッフルを行うと思われる場合は、おそらくこのファイルのソリューションを使用することをお勧めします。本物のために。

300万行のファイルの行をランダムに混ぜる

基本的に、シャッフル アルゴリズムの周期は非常に短いです (つまり、3000 万は言うまでもなく、300 万のファイルのすべての可能な組み合わせにヒットすることはできません)。データをメモリにロードできる場合は、彼らが言うように最善の策です。基本的に各行に乱数を割り当てて、そのバッドボーイを並べ替えます。

このスレッドを参照してください。そして、ここで、私はあなたのためにそれをやったので、あなたは何も台無しにしませんでした (それは冗談です),

import json
import random
from operator import itemgetter

a = set()
for i in range(0,193):
    json_data = open("C:/Twitter/user/user_" + str(i) + ".json")
    data = json.load(json_data)
    a.update(d['su'] for d in data)

print "Cleaned length is: " + str(len(new))

new = [(random.random(), el) for el in a]
new.sort()
new = map(itemgetter(1), new)
于 2011-01-08T04:43:40.577 に答える
0

速くなるかどうかはわかりませんが、numpy の shuffleを試すことができます。

于 2011-01-08T02:42:27.597 に答える