2016-09-11 9 views
0

Ich habe eine Liste mit eindeutigen Elementen (Namen, wenn Sie so wollen), die sich jedes Mal ändern, wenn ich mein Skript ausführe. Alle diese Elemente verfügen über einige berechnete Eigenschaften, die während des Skripts geändert werden. Zum Beispiel hat 'S1' pos = 55 und ori = 'R'. Ich möchte einen einfachen Zugriff auf diese Eigenschaften basierend auf ihrem Namen.Jedem Element einer Liste eine Set-Eigenschaft zuweisen Python

Wie können diese Eigenschaften am besten "zugewiesen" werden? Ich habe mich um und Wörterbücher scheinen nicht der richtige Weg nach vorn zu gehen, so habe ich versucht, mit Klassen und machte die folgenden nicht-funktionalen Code Code:

class Primer: #contains all properties of a primer 
    def __init__(self): 
     """ Contains all properties of the primer """ 
     self.pos = 0 #outermost 5' position in sequence to bind 
     self.ori = '' #F(orward) or R(everse) 


primer_list = ['S', 'M1', 'M2', 'M3', 'E'] 

for i in primer_list: 
     i = primer() 

print S.pos #this should give me the pos value of 'S' 

Bin ich auf dem richtigen Weg, aber etwas fehlt oder ist gibt es einen besseren Weg, dies zu tun?

BEARBEITEN Ich habe vergessen zu erwähnen, dass ich auch meine Werte irgendwie zurückbekommen muss. Ebenso ahnungslos, wie diese

mit der Liste
print primer_list[0].pos #should give me the pos value of S in my example 
+0

Haben alle diese Elemente die gleichen Eigenschaften? 'pos' und' ori'? Müssen sie mit bestimmten Werten initialisiert werden? – galah92

+0

@ galah92 haben sie alle die gleiche Menge an Eigenschaften, aber die Werte ändern sich z.B. Ori kann "F" oder "R" sein. Sie sollten mit leeren Werten initialisiert werden, aber diese sollten in späteren Schritten im Skript zugewiesen werden. – mimat

+0

Dann würde ich mit der Klasse gehen, wie Sie es gemacht haben. Ich glaube, es wird Ihnen helfen, Ihren Code zu strukturieren und ihn lesbarer zu machen. – galah92

Antwort

0

Sie wurden mit Problemen zu tun, nicht wahr eigentlich die alten Werte mit der erzeugten Instanz ersetzen. Ich fügte auch ein Namensfeld hinzu, damit Sie jede Instanz verfolgen können.

class Primer: #contains all properties of a primer 
    def __init__(self, name): 
     """ Contains all properties of the primer """ 
     self.name = name 
     self.pos = 0 #outermost 5' position in sequence to bind 
     self.ori = '' #F(orward) or R(everse) 

    def __str__(self): 
     return self.name 

primer_list = ['S', 'M1', 'M2', 'M3', 'E'] 
new_primer = [Primer(x) for x in primer_list] 

for i in new_primer: 
    print i 
    print i.pos 
    print i.ori 
+1

Dieser Code macht genau das, wozu ich ihn gebraucht habe! – mimat

Verwandte Themen