• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jak sprawdzić czy element listy jest w innej liście w Python

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
+1 głos
2,926 wizyt
pytanie zadane 5 marca 2021 w Python przez TeaCup Obywatel (1,370 p.)

Hej,

Mam kod:

if "l" or "g" or "g*" or "kg" or "kg." or "kg," or "litr" or "litry" in list_str:
    # do something

Chciałbym go zrefaktoryzować tak abym mógł stworzyć listę:

allowed_weights = ["l", "g", "g*", "kg", "kg.", "kg,", "litr", "litry"]

I sprawdzać czy jakikolwiek element z tej listy jest w zmiennej list_str, np. tak:

if allowed_weights in list_str:
    # do something

Jednak tak się nie da.

Moje pytanie to: Jak to zrobić bym mógł sprawdzić czy jakiś element listy allowed_weights jest w liście list_str?

Dzięki za pomoc.

Cześć.

1 odpowiedź

+3 głosów
odpowiedź 5 marca 2021 przez adrian17 Mentor (354,120 p.)
wybrane 5 marca 2021 przez TeaCup
 
Najlepsza

Mam kod:

if "l" or "g" or "g*" or "kg" or "kg." or "kg," or "litr" or "litry" in list_str:

Po pierwsze, to ten kod nie działa. To co napisałeś jest równoważne do:

if "l" or "g" or "g*" or "kg" or "kg." or "kg," or "litr" or ("litry" in list_str):

i w praktyce zawsze jest prawdziwy.

I sprawdzać czy jakikolwiek element z tej listy jest w zmiennej list_str, np. tak:

Zależnie od rozmiaru list, są różne rozwiązania o różnej złożoności i wydajności. W kazdym razie najbardziej bezpośrednie tłumaczenie to:

if any(element in list_str for element in allowed_weights):

Lub na odwrót (jeśli `list_str` to lista stringów a nie string):

if any(element in allowed_weights for element in list_str ):

Jeśli się da, można też prawą stronę `in` zamienić na seta.

A jeśli oba mogą być zbiorami to wystarczy sprawdzić czy jest między nimi przecięcie:

if set(list_str) & allowed_weights_set:

 

komentarz 5 marca 2021 przez TeaCup Obywatel (1,370 p.)

Hej @adrian17,

Dziękuję ci za odpowiedź. A czy wytłumaczył byś mi dlaczego:

if "l" or "g" or "g*" or "kg" or "kg." or "kg," or "litr" or "litry" in list_str:

Jest zawsze prawdziwe?

komentarz 5 marca 2021 przez adrian17 Mentor (354,120 p.)

Tak jak napisałem wyżej, to jest równoważne

if "l" or (...etc...) or ("litry" in list_str):

A coś takiego jest przecież zawsze prawdziwe:

if "l":

Więc

if "l" or cokolwiek:

też z definicji jest zawsze prawdziwe.

komentarz 5 marca 2021 przez TeaCup Obywatel (1,370 p.)
Hej @adrain17,

A jak powinienem skonstruować tego ifa żeby był poprawny?
komentarz 5 marca 2021 przez adrian17 Mentor (354,120 p.)
W zasadzie... wrzuciłbym te stringi do listy i zrobił dokładnie to co napisałem powyżej :)
komentarz 5 marca 2021 przez TeaCup Obywatel (1,370 p.)
Hej @adrian17,

Aha, w sumie to bardzo logiczne rozwiązanie :-D.

Dzięki za pomoc.

Podobne pytania

+1 głos
1 odpowiedź 1,496 wizyt
pytanie zadane 13 listopada 2021 w Python przez magda_19 Gaduła (3,080 p.)
0 głosów
1 odpowiedź 6,983 wizyt
0 głosów
1 odpowiedź 440 wizyt
pytanie zadane 14 października 2022 w Python przez Ichbinda Nowicjusz (230 p.)

93,441 zapytań

142,434 odpowiedzi

322,681 komentarzy

62,802 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

...