如何为列表中包含特定字符串的每个唯一元素创建[n]个元素的随机样本(使用nestedloops?)

2024-09-27 23:16:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图创建一个包含随机样本(更具体地说,分层样本)的列表。你知道吗

我的数据由一个包含几百万个电话号码(每个号码一个字符串)的列表组成,我将其拆分为一个包含两个字符串(每个号码一个字符串)的列表。 第一个字符串是城市代码,必须根据它对样本进行分层。我曾经

unique = list(set(citycode))

从主列表(mainlist[0])中获取所有唯一元素。你知道吗

假设我在列表'unique'中有~1000个元素,并且对于每个unique元素,我尝试在'mainlist'中随机找到5个元素,其中包含mainlist[I][0]中unique[I]的数量。 对于每个匹配,mainlist的两个字段/字符串都应附加到新列表“randomlist”中。所以最终的名单应该包括5000个电话号码。你知道吗

我曾想过使用嵌套循环来解决这个问题,但由于我是Python的初学者,并尝试使用在线教程来自学,我还没有真正找到解决这个问题的函数或方法。 在这种情况下,我不确定有什么可能的解决办法。你知道吗

任何想法或意见都将不胜感激。 谢谢您!你知道吗


Tags: 数据字符串代码元素列表数量分层电话号码
1条回答
网友
1楼 · 发布于 2024-09-27 23:16:30

假设两个列表如下:

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

相关问题 更多 >

    热门问题