2016-04-24 2 views
1

Ich habe zwei Variablen eine Zeichenfolge jedes und eine leere Liste halten:Wie adressiere ich ein bestimmtes Element in zwei Listen separat? Wie wähle ich eine beliebige Zahl eines Elements, das häufig in einer Liste vorkommt?

a = 'YBBB' 
b = 'RYBB' 
x = [] 

ich durch jede der Saiten Schleife wollen und behandeln könnte jeder ‚B‘ in den beiden Listen als eigenständiges Element (wünschte, ich nur Geben Sie a. ('B') und b. ('B') ein. Was ich eigentlich tun möchte, ist Schleife durch b und fragen Sie, wenn jeder der Artikel in b in ein sind. Wenn ja, die Länge des Artikels in b (say'B ') ist in ein überprüft.Dies sollte geben 3. Dann möchte ich die Längen des Artikels vergleichen in den zwei Listen und schieben Sie das kleinere der beiden in die leere Liste. In diesem Fall werden nur zwei "B" in x geschoben.

Antwort

1

Sie eine verschachtelte Liste Verständnis verwenden können wie folgt vor:

>>> [i for i in set(b) for _ in range(min(b.count(i), a.count(i)))] 
['B', 'B', 'Y'] 

Wenn die Reihenfolge wichtig ist, dass Sie collections.OrderedDict für die Erstellung der Einzelstücke aus b verwenden können:

>>> from collections import OrderedDict 
>>> 
>>> [i for i in OrderedDict.fromkeys(b) for _ in range(min(b.count(i), a.count(i)))] 
['Y', 'B', 'B'] 
+0

Dank für die Antwort Vielen Dank, dass (ich bin für den späten Kommentar sorry). Das hat das Problem gelöst, aber ich verstehe jedes Bit des Codes nicht ganz. Was genau macht der Unterstrich im Listenverständnis? Bitte antworten Sie hier oder zeigen Sie auf eine Ressource, die Ihnen helfen könnte. Danke noch einmal. – Taiwosam

+0

@Taiwosam Das ist nur eine Möglichkeit, die Wegwerf-Variable nicht zu behalten, wenn sie nicht in der Schleife verwendet werden soll. Das bedeutet, dass Ihr Code keine Variable zuweisen und den Wert ein anderes Mal aufrufen muss, was einen bemerkenswerten Unterschied in der Performance macht ;-) speziell wenn Sie mit großen Datenmengen arbeiten. – Kasramvd

-1

Dies ist nutzlos Text für die Moderatoren.

import collections 

a = 'YBBB' 
b = 'RYBB' 
x = [] 

a_counter = collections.Counter(a) 
b_counter = collections.Counter(b) 
print(a_counter) 
print(b_counter) 

for ch in b: 
    if a_counter[ch]: 
     x.append(min(a_counter[ch], b_counter[ch]) * ch) 

print(x) 

--output:-- 
Counter({'B': 3, 'Y': 1}) 
Counter({'B': 2, 'Y': 1, 'R': 1}) 
['Y', 'BB', 'BB'] 

Oder, wenn Sie nur durch das einzigartige Element in dem Schritt b wollen:

for ch in set(b): 
    if a_counter[ch]: 
     x.append(min(a_counter[ch], b_counter[ch]) * ch) 

print(x) 

--output:-- 
['Y', 'BB'] 
Verwandte Themen