Forum Coders' city Strona Główna Coders' city
Nasza pasja to programowanie!
 

 PomocPomoc   SzukajSzukaj   UżytkownicyUżytkownicy   GrupyGrupy  RejestracjaRejestracja 
Archiwum starego forum + teoria    RSS & Panel/SideBar
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 

Potrzebuję szybkiej odpowiedzi na moje pytanie... Zasady

Petla for czy while ?

Idź do strony Poprzedni  1, 2

 
Odpowiedz do tematu    Forum Coders' city Strona Główna -> Python
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
hurgadion



Dołączył: 06 Kwi 2011
Posty: 853
Skąd: Web :)

PostWysłany: Nie Kwi 09, 2017 4:12 am      Temat postu: Odpowiedz z cytatem Pisownia

sporo jest kursów z Pythona na platformach edx, coursera, co najmniej 20 na różnym stopniu zaawansowania, począwszy od elementarnych aż od kursów podejmujących zaawansowane zagadnienia i techniki programistyczne... dużym plusem tych kursów jest to, że pisze się programiki, które są testowane przez autograder... :)
_________________
miasto nauki praktycznej
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Odwiedź stronę autora Numer GG
Caporeira



Dołączył: 26 Lis 2015
Posty: 49

PostWysłany: Pon Kwi 10, 2017 3:32 pm  OP    Temat postu: Odpowiedz z cytatem Pisownia

Według tutoriali przerobienie pętli for na comprehension powinno wyglądać mniej więcej tak:
Kod:

result = [del result[x] for x in result if 'String']


ale po pierwszej nie działa del i po drugie pluje się że:
Kod:
UnboundLocalError: local variable 'result' referenced before assignment


gdzie result jest definiowane na samym początku programu (jeszcze przed klasami i funkcjami), czyli rozmiem że jest to globalna zmienna ?
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
hurgadion



Dołączył: 06 Kwi 2011
Posty: 853
Skąd: Web :)

PostWysłany: Pon Kwi 10, 2017 3:47 pm      Temat postu: Odpowiedz z cytatem Pisownia

trochę komplikujesz i to jeszcze nie za dobrze, powinno wystarczyć tak:
Kod:

result = [x for x in result if 'String' in x]


no i sprawdź przed tą linijką czy tablica result jest już zdefiniowana... :)

_________________
miasto nauki praktycznej
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Odwiedź stronę autora Numer GG
Caporeira



Dołączył: 26 Lis 2015
Posty: 49

PostWysłany: Wto Kwi 11, 2017 7:13 am  OP    Temat postu: Odpowiedz z cytatem Pisownia

Bardzo dziekuje. Działa perfekcyjnie :)

Kod:
    def not_need(self):

        global result

        string = ['Barcode']
        result = [x for x in result if 'Barcode' not in x]


w przyszłości chciałbym dodać więcej stringów. Więc już teraz chciałbym to zrobić, dlatego ten string którego szukam umieściłem w liście 'string' i tam dodawać nowe stringi.
Patrze na różne przykłady, ale chyba potrzebuje czasu aby się z tym oswoić (tego się nauczyć).
Próbowałem czegoś takiego:
Kod:
        #result = [string for string in result]
        #result = [string for result in x for string in result]
        #result = [x not in result for x in string]

Ale to nie to co chce osiągnąć.
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
hurgadion



Dołączył: 06 Kwi 2011
Posty: 853
Skąd: Web :)

PostWysłany: Wto Kwi 11, 2017 9:22 am      Temat postu: Odpowiedz z cytatem Pisownia

powinna wystarczyć taka konstrukcja, budujemy funkcję sprawdzającą czy dany element zawiera podstring z określonej listy stringów:
Kod:

def jest_string(a, lista_str):
    for e in lista_str:
        if e in a:
            return True
    return False


a następnie powyższe comprehension z lekką modyfikacją:
Kod:

result = [x for x in result if jest_string(x, lista_str)]


Pozdrawiam :)

_________________
miasto nauki praktycznej
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Odwiedź stronę autora Numer GG
Guaz



Dołączył: 21 Cze 2017
Posty: 2

PostWysłany: Sro Cze 21, 2017 1:14 am      Temat postu: Odpowiedz z cytatem Pisownia

Można nawet pokusić się o inną optymalizację, bez odwoływania się do zewnętrznej funkcji:

Kod:

result = [dig_elem for elem in result for dig_elem in elem if dig_elem in lista_str]



A jeśli chcemy żeby nam zwracał element, to zadajemy mu:

Kod:

result = [elem for elem in result for dig_elem in elem if dig_elem in lista_str]



Jednak to nadal działa dobrze tylko jeśli nasza lista result była dwuwymiarowa, bądź poszukiwanymi elementami są słowa które nie będą częścią innego słowa kilkukrotnie jak na przykład:
'a' w słowie 'ananas'. Więc działamy krok dalej:
Kod:

result = ['help', 'me', 'now', 'maybe', 'ananas']
list_str = ['he', 'as']
result = [elem for elem in result for check in list_str if check in elem]
#More redable:
#[elem for elem in result
#     for check in list_str
#         if check in elem]
print(result)
#>>> ['help', 'ananas']


Problemu powyższego to nie rozwiązuje, jednak pozwala nam sprawdzać całe słowa czy występują w elementach, spełniając założenie że nic nie będzie dwukrotnie zawarte w elemencie.
W innym wypadku pozostaje nam eliminować zwielokrotnione elementy wykorzystując zbiory.
Kod:
result = list(set([elem for elem in result for check in lista_str if check in elem]))

To jednak ze względu na ilość operacji raz że jest nieoptymalne, dwa że ustawia nam elementy w innej kolejności. (najczęściej rosnącej z tego co się orientuje, ale pewny nie jestem)
Więc zależnie od przetwarzanych danych, podrzucam dwie metody :). W przypadku chęci zastosowania tej drugiej, już lepiej posłuchać kolegi wyżej, dla długich list będzie szybsze z funkcją.

_________________
Python 3.5.2
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
hurgadion



Dołączył: 06 Kwi 2011
Posty: 853
Skąd: Web :)

PostWysłany: Sro Cze 21, 2017 3:26 pm      Temat postu: Odpowiedz z cytatem Pisownia

przy większej ilości danych chyba warto napisać jakąś funkcję hashującą, przyśpieszającą wyszukiwanie... można wykorzystać do tego bardzo użyteczny obiekt słownika w Pythonie...
_________________
miasto nauki praktycznej
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Odwiedź stronę autora Numer GG
Wyświetl posty z ostatnich:   
Odpowiedz do tematu    Forum Coders' city Strona Główna -> Python Wszystkie czasy w strefie CET (Europa)
Idź do strony Poprzedni  1, 2
Strona 2 z 2

 
Skocz do:  
Możesz pisać nowe tematy
Możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Możesz dodawać załączniki na tym forum
Możesz pobierać pliki z tego forum




Debug: strone wygenerowano w 0.24775 sekund, zapytan = 11
contact

| Darmowe programy i porady Jelcyna | Tansze zakupy w Helionie | MS Office Blog |