2016-12-15 2 views
0

У меня есть текстовый файл с genecodes разделенной табуляцией, подобной этой структуру:Выберите один случайный элемент из каждого списка вложен в списке, различного между ними, и создать список п раз (ReSampling)

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

и я хочу создать список с , выбрав из каждой строки один случай случайным образом и выбранные элементы должны быть РАЗЛИЧИЕ МЕЖДУ ИХ. В конце я хочу повторить процесс п раз, чтобы получить выходной файл с этой структурой:

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

(каждую строку соответствует каждому генерируемому списку случайных элементов) . На данный момент у меня есть этот скрипт: где: all_cand является входной текстовый файл

#!/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

Смежные вопросы