我已经将此answer作为在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)
如果有更有效的方法,我会非常感谢有关如何做的建议。
谢谢,
答案 0 :(得分: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)
答案 1 :(得分:2)
如果您认为自己要进行随机播放,那么最好使用此文件中的解决方案。对于realz。
randomly mix lines of 3 million-line file
基本上,shuffle算法的周期非常短(意味着它不能达到300万个文件的所有可能组合,更不用说3000万个)。如果您可以将数据加载到内存中,那么您最好的选择就是他们所说的。基本上为每一行分配一个随机数并对那个badboy进行排序。
查看此主题。在这里,我为你做了,所以你没有弄乱任何东西(这是一个笑话),
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)
答案 2 :(得分:0)
我不知道它是否会更快,但您可以尝试numpy's shuffle。