Beachten Sie, die folgenden Möglichkeiten:
>>>listA = ['a', 'a', 'b','b','b','c']
>>>listB = ['b', 'a','a','b','c','d']
>>>all(item in listB for item in listA)
True
Wenn Sie lesen die "alle" -Linie, wie Sie wäre in Englisch, das ist nicht falsch, aber kann irreführend sein, da listA ein drittes 'b' hat, aber listB nicht.
Dies hat auch das gleiche Problem:
def list1InList2(list1, list2):
for item in list1:
if item not in list2:
return False
return True
einfach eine Anmerkung. Folgendes funktioniert nicht:
>>>tupA = (1,2,3,4,5,6,7,8,9)
>>>tupB = (1,2,3,4,5,6,6,7,8,9)
>>>set(tupA) < set(TupB)
False
Wenn Sie die Tupel in Listen konvertieren, funktioniert es immer noch nicht. Ich weiß nicht, warum Streicher funktionieren, aber Intars nicht.
Works hat aber gleiches Problem von nicht Zahl des Elemente Vorkommen zu halten:
>>>set(tupA).issubset(set(tupB))
True
Verwendung von Sets ist keine umfassende Lösung für Multi-Element-Matching-Auftreten.
Aber hier ist eine Einzeiler Lösung/Anpassung an shantanoo Antwort ohne try/except:
all(True if sequenceA.count(item) <= sequenceB.count(item) else False for item in sequenceA)
Eine eingebaute Funktion eine Liste Verständnis unter Verwendung eines ternären Konditionaloperator wickeln. Python ist großartig! Beachten Sie, dass "< =" nicht "==" sein sollte.
Mit dieser Lösung Sequenz A und B kann Typ Tupel und Liste und andere "Sequenzen" mit "zählen" Methoden. Die Elemente in beiden Sequenzen können die meisten Typen sein. Ich würde das nicht mit Diktaten verwenden, wie es jetzt ist, daher verwende ich "Sequenz" statt "iterierbar".
Hallo, der zweite Teil ist was ich versucht habe zu tun. Es sieht so aus, als ob es der einzige Weg ist. Vielen Dank! – pogo
Scheitert es bei '['s', 'e', 'r', '', '', '', 'y']' und '['', '', '', 'y' ] ' – SIslam
@SIslam Hängt von der Bestellung ab. Die zweite Liste ist eine Teilmenge der früheren Liste, so dass die Lösung in meiner Antwort sie korrekt erkennen würde. – poke