zdawać sobie sprawę z następujących powodów:
>>>listA = ['a', 'a', 'b','b','b','c']
>>>listB = ['b', 'a','a','b','c','d']
>>>all(item in listB for item in listA)
True
Jeśli czytasz „wszystkie” linię jak ty w języku angielskim, to nie jest złe, ale może wprowadzać w błąd, ponieważ listA ma trzecie "b", ale lista B nie.
Ma to również ten sam problem:
def list1InList2(list1, list2):
for item in list1:
if item not in list2:
return False
return True
Tylko uwaga. Następujące funkcje nie działają:
>>>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
Konwersja krotek do list nadal nie działa. Nie wiem, dlaczego struny działają, ale int nie.
działa, ale ma ten sam problem nie utrzymując liczbę wystąpień elementu:
>>>set(tupA).issubset(set(tupB))
True
Korzystanie z zestawów nie jest kompleksowe rozwiązanie dla multi-occurrance element pasujący.
Ale tu jest rozwiązanie jednego-liner/adaptacja do odpowiedzi shantanoo bez try/z wyjątkiem:
all(True if sequenceA.count(item) <= sequenceB.count(item) else False for item in sequenceA)
wbudowaną funkcję zawijania listowych używając potrójny operatora warunkowego. Python jest niesamowity! Zauważ, że "< =" nie powinno być "==".
W tym rozwiązaniu sekwencje A i B mogą być krotkami typu tuple i list oraz innymi "sekwencjami" metodami "count". Elementy w obu sekwencjach mogą być większością typów. Nie używałbym tego z dyktami, tak jak jest teraz, stąd użycie "sekwencji" zamiast "iterable".
Witam, druga część jest tym, co próbowałem zrobić. Wygląda na to, że to jedyna droga. Dzięki! – pogo
Czy zawiedzie w przypadku "[" s "," e "," r "," "," "," "," y "]" i "[" "," "," "," y " ] ' – SIslam
@SIslam Zależy od zamówienia. Druga lista jest podzbiorem poprzedniej listy, więc rozwiązanie w mojej odpowiedzi poprawnie ją rozpozna. – poke