从随机样本中写出来

时间:2012-02-28 15:24:29

标签: python random random-sample

我有一个30 n随机样本来自列表,我写入文件。

我更愿意通过写入“in_sample”或“not_in_sample”来标记去往样本的行。

现在看起来像这样:

mysample=random.sample(list, 30)
for i in mysample:
    out.write("%s\n" % (i))

我只写出样本中的行,但我希望文件看起来像这样:

line 1 in_sample

line 2 not_in_sample

line 3 in_sample

line 4 not_in_sample

该文件之前看起来相同但没有最后一列。

我清楚了吗?

4 个答案:

答案 0 :(得分:1)

my_sample = set(random.sample(my_list, 30))
for i, item in enumerate(my_list, 1):
    out.write('line {0} {1}\n'.format(i, ('not_in_sample', 'in_sample')[item in my_sample]))

答案 1 :(得分:1)

mysample=random.sample(list, 30)
for i in range(1:31)
    if i in mysample:
        out.write("line %s\n in_sample" % (i))
    else:
        out.write("line %s\n not_in_sample" % (i))

答案 2 :(得分:1)

这样做的一种方法是对您的列表索引进行采样而不是其内容。

例如,如果您的列表名为lst

indexes_samples = sorted(random.sample(range(len(lst)), 30))

for i in indexes_samples:
    lst[i]  # do what you want

或许我认为您可能想要做类似的事情:

idx = sorted(random.sample(range(len(lst)), 30))

j = 0
for i,num in enumerate(lst):
    if j <= len(idx) and i == idx[j]:
        msg = 'line {} in sample'
        j += 1
    else:
        msg = 'line {} not in sample'

    print(msg.format(num))   # out.write() or whatever

答案 3 :(得分:0)

将样本放入集合中,从1迭代到最大总体值,并使用包含测试来查看当前迭代是否在集合中。