[英]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.