2016-12-15 187 views
0

我有通過類似於這種結構的製表符分隔genecodes txt文件:從嵌套在列表中的每個列表中,它們之間的不同選擇一個隨機項,並生成列表的n倍(重採樣)

ENSG00000111111 ENSG00000111111 ENSG00000111111 ENSG00000111555 
ENSG00000111111 ENSG00000111111 ENSG00000111111 ENSG00000111222 
ENSG00000111111 ENSG00000111111 ENSG00000111111 ENSG00000333555 

我想創建一個列表從每行中隨機選擇一個項目和選定的項目必須是不同之間他們。在端欲重複該過程n次,以便獲得具有這種結構的輸出文件:

ENSG00000111111 ENSG00000111222 ENSG00000333555 
ENSG00000111555 ENSG00000111222 ENSG00000333555 
ENSG00000111555 ENSG00000111222 ENSG00000111111 
... 

(每行對應於隨機項中的每個生成的列表) 。目前,我有這樣的腳本: 其中:all_cand是與我的腳本TXT輸入文件

#!/usr/bin/python 
import sys 
import os 
import random 
from itertools 
import numpy as np 
def rand_cand (all_cand): 
    cand_list= [] 
    main_list = [] 
    cand_file= open(all_cand, "r") 
    for _ in itertools.repeat(None, 10): 
     for line in cand_file: 
      cand_rows = line.split() 
      cand_list.append(cand_rows) 

     for item in cand_list: 
      aux_old = np.random.choice(item, replace=False) 
      if not aux_old in main_list: 
       main_list.append(aux_old) 
      else: 
       aux_new = np.random.choice(item, replace=False) 
       main_list.append(aux_new) 
    print(main_list) 

,每次生成的列表中包含的重複,我認爲這是由於如果循環。我嘗試在將要附加到列表中的那些已經存儲的每一個項目比較,但它沒有......所以我錯了一個輸出爲:

ENSG00000111111 ENSG00000111111 ENSG00000111111 
ENSG00000111111 ENSG00000111111 ENSG00000111222 
ENSG00000111111 ENSG00000111111 ENSG00000111111 
ENSG00000111555 ENSG00000111111 ENSG00000111111 
... 

感謝事先!我希望清楚我的問題

回答

0

我沒有測試它尚未的解釋,但是這應該這樣做

import csv 
import itertools 
import random 

with open('file.txt') as infile: 
    data = list(csv.reader(infile, delimiter='\t')) 

answer = [] 
combos = list(itertools.combinations_with_replacement([0,1,2,3], 3)) 
for _ in range(n): 
    selection = [] 
    while len(set(selection)) != 3: 
     inds = random.choice(combos) 
     rows = random.sample(data, 3) 
     selection = [row[i] for i,row in zip(inds, rows)] 
    answer.append(selection) 
+0

謝謝您的回答。我已經使用過你的腳本,但它沒有給出任何結果...... – Gaferolo

+0

@Gaferolo:那裏有一個小錯誤。現在已經修復了。一探究竟! – inspectorG4dget

+0

我已經改變了這個小錯誤,但它仍然無法正常工作。你有沒有測試過它? – Gaferolo

相關問題