2012-02-28 61 views
0

我從寫入文件的列表中獲取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 

文件看起來都一樣過,但沒有最後一欄。

我清楚嗎?

回答

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 
+0

我編輯 – AWE 2012-02-28 16:24:28

+0

@AWE之前用你的回答:您歡迎!我從舊的編輯中恢復了這2行:) – 2012-02-28 16:27:21

0

將您的樣本放入一個集合中,從1迭代到最大總體值,並使用包含測試來查看當前迭代是否在集合中。

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
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))