2016-09-28 12 views
7

widzę, że poniższy kod może sprawdzić, czy słowo jestporównywania ciągów w liście do strun w liście

list1 = 'this' 
compSet = [ 'this','that','thing' ] 
if any(list1 in s for s in compSet): print(list1) 

Teraz chcę sprawdzić, czy słowo na liście jest w jakimś innym liście, jak poniżej:

list1 = ['this', 'and', 'that' ] 
compSet = [ 'check','that','thing' ] 

Jaki jest najlepszy sposób, aby sprawdzić, czy słowa listy1 są w compSet i robi coś na nieistniejących elementów, na przykład dołączając „i” do compSet lub kasowanie „i” z list1?

__________________update___________________

Właśnie okazało się, że robi to samo nie działa z sys.path. Poniższy kod czasami dodaje ścieżkę do sys.path, a czasami nie.

myPath = '/some/my path/is here' 
if not any(myPath in s for s in sys.path): 
    sys.path.insert(0, myPath) 

Dlaczego to nie działa? Również, jeśli chcę zrobić tę samą operację na zbiorze moich ścieżkach,

myPaths = [ '/some/my path/is here', '/some/my path2/is here' ...] 

Jak mogę to zrobić?

+0

Ponowna aktualizacja, co nie działa? Czy to powoduje błąd? Być może po prostu nie używasz odwrotnych ukośników w zmiennej 'myPath'? – brianpck

+0

@brianpck Dzięki, zaktualizowałem. Powyższa funkcja dodająca ścieżkę do sys.path działa niekonsekwentnie. Czasami działa, a czasem nie. Być może jest to specyficzny problem mojego środowiska, tak myślę ... Nawiasem mówiąc, jeśli robię to dodając do ścieżki coś na liście ścieżek z sys.path, czy funkcja Intersection jest najlepsza? – noclew

+0

Jeśli chcesz znaleźć ścieżki znajdujące się na obu listach, to tak, przecięcie jest najlepszym sposobem. W odniesieniu do 'sys.path', zalecam zadać inne pytanie, czy jest to problem, ponieważ jest to naprawdę osobny problem. – brianpck

Odpowiedz

8

Istnieje prosty sposób aby sprawdzić przecięciu dwóch listach: konwertować je do zestawu i użyć intersection:

>>> list1 = ['this', 'and', 'that' ] 
>>> compSet = [ 'check','that','thing' ] 
>>> set(list1).intersection(compSet) 
{'that'} 

Można również użyć operatory bitowe :

Przecięcie:

>>> set(list1) & set(compSet) 
{'that'} 

Unia:

>>> set(list1) | set(compSet) 
{'this', 'and', 'check', 'thing', 'that'} 

można zrobić żadnej z tych wyników listę używając list().

+0

Dziękuję bardzo! – noclew

+0

Cześć Brian, właśnie zaktualizowałem moje pytanie. Czy możesz to sprawdzić? – noclew

1

Spróbuj tego:

>>> l = list(set(list1)-set(compSet)) 
>>> l 
['this', 'and'] 
+0

Tylko wyjaśnić; to pokazuje słowa w 'list1', że * nie jest * w' compSet', a nie które słowa w nim. –