[英]How to create a random sample of [n] elements for each unique element in list containing a certain string(with nested-loops?)
我正在尝试创建一个包含随机样本(更具体地说是分层样本)的列表。
我的数据包含一个包含数百万个电话号码(每个字符串)的列表,我将其拆分为一个包含2个字符串(每个数字)的列表。 第一个字符串是城市代码,必须对城市代码进行分层。 我用了
unique = list(set(citycode))
从主列表(mainlist [0])中获取所有唯一元素。
假设我在“唯一”列表中有〜1000个元素,对于每个唯一元素,我试图在“主列表”中随机查找5个元素,这些元素包含mainlist [i] [0]中的unique [i]数量。 对于每次匹配,主列表的两个字段/字符串都应附加到新列表“ randomlist”中。 因此,最终列表应包含5000个电话号码。
我曾考虑为此使用嵌套循环,但是由于我是Python的初学者,并尝试使用在线教程自学,所以我还没有真正找到解决此问题的函数或方法。 我不确定在这种情况下什么可能的解决方法。
任何想法或意见将不胜感激。 谢谢!
假设有两个列表,例如:
main = [(123, xxxxxxx),...]
unique = [123, ...]
然后,您可以执行以下操作:
from random import shuffle
shuffle(main)
out = []
for u in unique:
i = 0
it = (x for x in main if x[0] == u)
while i < 5:
try:
out.append(main.pop(main.index(next(it))))
except:
pass
i+=1
out
将包含一个类似于在main中找到的元组的列表,每个唯一的区号最多5个(如果main少于5个,则小于5个),并且是随机分布的。
更新
由于您要一起排除表示量太少的区号,因此,请执行以下操作:
from random import shuffle
from collections import Counter
c = Counter(x[0] for x in main)
main = [x for x in main if c[x] >= 5]
shuffle(main)
out = []
for u in unique:
i = 0
it = (x for x in main if x[0] == u)
while i < 5:
out.append(main.pop(main.index(next(it))))
i+=1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.