2016-10-31 3 views
1

Ich muss sp_list1 so lesen, dass drei Elemente aus jeder Liste von entsprechenden Positionen in einer Liste sind. Die nächsten drei (nicht überlappenden) werden in eine separate Liste eingetragen, so dass eine Liste erstellt wird.Wie erstellt man eine Liste von Listen mit positionsspezifischen Elementen aus der ursprünglichen Liste in Python?

Input: seq_list1 = ['ATGCTATCATTA','ATGCTATCATTA','ATGCTATCATTT'] 

gewünschte Ausgabe

seq_list_list1 =[['ATG','ATG','ATG'],['CTA','CTA','CTA'],['TCA','TCA','TCA'],['TTA','TTA','TTT']] 

Ich habe das Gefühl, dies machbar sein sollte wie Listenkomprehensionen, aber ich kann es nicht herausgefunden (insbesondere kann ich nicht herausfinden, wie man Zugriff auf den Index eines Elements, so dass man drei aufeinanderfolgende Indizes auswählt, die sich bei Verwendung eines Listenverständnisses nicht überschneiden.

+0

Sie müssen festgestellt haben, dass 'append' ein Argument benötigt. Warum hast du nicht einen zur Verfügung gestellt? – TigerhawkT3

+0

Das war ein Teil, über den ich mir nicht sicher war. Lege ich einfach eine leere Liste, wie ich die Bearbeitung gemacht habe? – Biotechgeek

+0

Es sieht aus wie der Code, der tatsächlich tun würde, was Sie wollen, ist radikal verschieden von dem, was Sie versucht haben (die aus dem oben genannten Grund nicht sogar ohne Fehler laufen würde). Es ist natürlich machbar, aber SO ist kein Kodierungsdienst. Sie müssen mehr lernen und einen weiteren Versuch unternehmen. – TigerhawkT3

Antwort

0

Sie können diesen Code hier verwenden, Sie können ihn nach Ihren Wünschen manipulieren. Ich hoffe, es hilft:

seq_list1 = ['ATGCTATCATTA','ATGCTATCATTA','ATGCTATCATTT'] 
n=3 

seq_list1_empty=[] 
counter = 0 

for k in range(len(seq_list1)+1): 
    for j in seq_list1: 
     seq_list1_empty.append([j[i:i+n] for i in range(0, len(j), n)][counter])# this will reassemble the string as an index 
    counter+=1 

counter1=0 
counter2=3 
final_dic=[] 
for i in range(4): 
    final_dic.append(seq_list1_empty[counter1:counter2])#you access the first index and the third index here 
    counter1+=3 
    counter2+=3 
print final_dic 

Der Ausgang ist

[['ATG', 'ATG', 'ATG'], ['CTA', 'CTA', 'CTA'], ['TCA', 'TCA', 'TCA'], ['TTA', 'TTA', 'TTT']] 
+0

1) Sie tun jemandes Arbeit für sie, und SO ist kein Kodierungsdienst. 2) ___Die Ausgabe ist nicht einmal richtig .___ – TigerhawkT3

+0

Ich versuche hier zu helfen. Ich überprüfe immer noch die Ausgabe PRO: D –

+0

Nach der Bearbeitung, machst du noch jemand Arbeit für sie mit Null-Erklärung (nutzlos für die OP sowie zukünftige Besucher), und es ist immer noch falsch. – TigerhawkT3

0
seq_list1 = ['ATGCTATCATTA','ATGCTATCATTA','ATGCTATCATTT'] 


def new_string(string, cut): 
    string_list = list(string) # turn string into list 

    # create new list by appending characters from from index specified by 
    # cut variable 
    new_string_list = [string_list[i] for i in range(cut, len(string_list))] 

    # join list characters into a string again 
    new_string = "".join(new_string_list) 

    # return new string 
    return new_string 


new_sequence = [] # new main sequence 

# first for loop is for getting the 3 sets of numbers 
for i in range(4): 
    sub_seq = [] # contains sub sequence 

    # second for loop ensures all three sets have there sub_sets added to the 
    #sub sequence 
    for set in range(3): 
     new_set = seq_list1[set][0:3] #create new_set 
     sub_seq.append(new_set) # append new_set into sub_sequence 


    #checks if sub_seq has three sub_sets withing it, if so 
    if len(sub_seq) == 3: 
     #the first three sub_sets in seq_list1 sets are removed 
     for i in range(3): 
      # new_string function removes parts of strings and returns a new 
      # string look at function above 

      new_set = new_string(seq_list1[i], 3) # sub_set removed 
      seq_list1[i] = new_set # new set assigned to seq_list1 

    # new_sub sequence is added to new_sequence 
    new_sequence.append(sub_seq) 

    #sub_seq is errased for next sub_sequence 
    sub_seq = [] 


print(new_sequence) 

bereits. Es tut mir leid, wenn es schwierig zu verstehen ist, nicht sehr kompetent in der Dokumentation.

Verwandte Themen