Wpis z mikrobloga

Mirki

found = [ elem for elem in list_elem for substring in substrings if not re.search(r"\b" + substring + r"\b", elem, re.IGNORECASE)]
Jest równe

for elem in list_elem:
for substring in substrings:
if not re.search(r"\b" + substring + r"\b", elem, re.IGNORECASE):
found.append(elem)

?
Upewniam sie ze dobrze zrozumialem te list comprehensions
#python #programowanie
  • 11
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@KevinMalone: no tak na oko, to źle. Zapodaj zmienne, których używasz.
jeżeli chcesz spłaszczyć listę(krotkę) list(krotek), to używasz czegoś w rodzaju:

flat_list = [item for sublist in nested_list for item in sublist]
gdzie:
nested_list - wspomniana
  • Odpowiedz
@draxter: szukam podwyrazów w wyrazach, obie zmienne są listami wyrazów, chcę dodać element do listy jeśli substring znajduje sie w danym stringu

pierwszy zapis jest na pewno dobry, tylko sobie to przerobiłem na ten drugi który zapodałem, żeby sprawdzić czy dobrze to w ogóle czytam
  • Odpowiedz
@draxter: Spoko, właśnie przetestowałem tak jak mówiłeś i wyszło, że jest okej ( ͡ ͜ʖ ͡)
dzieki, zmeczony jestem i nie pomyslalem o najbardziej oczywistym rozwiązaniu xD
  • Odpowiedz
@blend: Powinien wyglądać tak jak oryginalnie napisałem, tzn:
found = [ elem for elem in list_elem for substring in substrings if not re.search(r"\b" + substring + r"\b", elem, re.IGNORECASE)]
Jednak jest to turbonieefektywne i dla list o długości ~6000 stringów mieli to z 10 minut ( ͡° ʖ̯ ͡°)

Ale wymyślilem że ten regex jest po prostu zbędny, i dużo lepiej śmiga jak zmienimy to na:
  • Odpowiedz