Python Intertools күші

Блог

Python Intertools күші

Python Intertools күші

Келіңіздер, Python кітапханаларының itertools және more_itertools -ті зерттеп, оларды өңдеу үшін олардың артықшылықтарын қарастырайық. Көптеген Python кітапханалары бар, бірақ олардың көпшілігі itertools біріктіретін және more_itertools қамтамасыз ететін нәрсеге жақын емес. Бұл екі кітапхана Python -да кейбір деректерді өңдеу / қайталау кезінде өте толық. Алайда, бір қарағанда, бұл кітапханалардағы функциялар пайдалы емес болып көрінуі мүмкін, сондықтан олардың ең қызықтысын, соның ішінде оларды қалай тиімді пайдалану керектігін қарастырайық!



1. Қысыңыз

dates = [ '2020-01-01', '2020-02-04', '2020-02-01', '2020-01-24', '2020-01-08', '2020-02-10', '2020-02-15', '2020-02-11', ] counts = [1, 4, 3, 8, 0, 7, 9, 2] from itertools import compress bools = [n > 3 for n in counts] print(list(compress(dates, bools))) # Compress returns iterator! # ['2020-02-04', '2020-01-24', '2020-02-10', '2020-02-15']

Жолдарды сүзу кезінде сізде көптеген нұсқалар бар, олардың бірі - қайталанатын және логикалық селекторы бар компресс, және селектордағы сәйкес элемент шын болатын қайталанатын жазбаларды шығарады.

Біз мұны жоғарыдағы мысалдағыдай бір жолды екіншісіне сүзу нәтижесін қолдану үшін қолдана аламыз, онда біз сәйкес сан 3 -тен үлкен болатын күндердің тізімін жасаймыз.



2. Жинақтау

Атауынан көрініп тұрғандай - біз бұл функцияны кейбір (екілік) функциялардың нәтижелерін жинақтау үшін қолданамыз. Бұған мысалдар максималды немесе факторлық түрде қосылуы мүмкін:

from itertools import accumulate import operator data = [3, 4, 1, 3, 5, 6, 9, 0, 1] list(accumulate(data, max)) # running maximum # [3, 4, 4, 4, 5, 6, 9, 9, 9] list(accumulate(range(1, 11), operator.mul)) # Factorial # [1, 2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800]

Егер сіз аралық нәтижеге қызығушылық танытпасаңыз, functools.reduce көмегімен тек соңғы мәнді және жоғары жад тиімділігін сақтай аласыз.



3. Цикл

Бұл функция қайталап, одан шексіз циклдар жасай алады. Бұл, мысалы, ойыншылар ауысатын ойындарда пайдалы болуы мүмкін. Тағы бір керемет цикл шексіз айналуды тудырады

# Cycling through players from itertools import cycle players = ['John', 'Ben', 'Martin', 'Peter'] next_player = cycle(players).__next__ player = next_player() # 'John' player = next_player() # 'Ben' # ... # Infinite Spinner import time for c in cycle('/-|'): print(c, end = ' ') time.sleep(0.2)

4. Ти

Ақырында, itertools модулі - бұл не болғанын еске түсіруге мүмкіндік беретін, бірінен бірнеше ілмектерді құрайтын тіс. Бұған мысал itertools формулаларынан жұптастыру функциясы (сонымен қатар more_itertools) болып табылады, ол қайталанатын кірістен мән жұптарын қайтарады (ағымдағы және алдыңғы мәндер):

from itertools import tee def pairwise(iterable): ''' s -> (s0, s1), (s1, s2), (s2, s3), ... ''' a, b = tee(iterable, 2) next(b, None) return zip(a, b)

Бұл функция бір деректер ағыны үшін бірнеше бөлек көрсеткіш қажет болған кезде пайдалы болады. Оны қолданған кезде абай болыңыз, себебі бұл есте сақтау кезінде өте қымбат болуы мүмкін. Тағы бір айта кетерлік жайт, сіз таяқшаны қолданғаннан кейін түпнұсқаны пайдаланбауыңыз керек, себебі ол жаңа футболкаға айналды

5. Бөлу

Алдымен more_itertools - бұл devide. Атауынан көрініп тұрғандай, ол қайталанатынды қайталау санына бөледі. Төмендегі мысалдан көріп отырғаныңыздай, қосымша қайталаудың ұзақтығы бірдей болмауы мүмкін, себебі ол бөлінетін элементтердің санына және қосалқы қайталаулардың санына байланысты.

from more_itertools import divide data = ['first', 'second', 'third', 'fourth', 'fifth', 'sixth', 'seventh'] [list(l) for l in divide(3, data)] # [['first', 'second', 'third'], ['fourth', 'fifth'], ['sixth', 'seventh']]

Аватар
nguyen chan thanh @ nguyen.chi.thanh
682 27 37
Дүйсенбі, 9:46, 5 минут оқылады
Төрт. Бес
Python Intertools күші
питон үйреніңіз
Келіңіздер, Python кітапханаларының itertools және more_itertools -ті зерттеп, оларды өңдеу үшін олардың артықшылықтарын қарастырайық. Көптеген Python кітапханалары бар, бірақ олардың көпшілігі itertools біріктіретін және more_itertools қамтамасыз ететін нәрсеге жақын емес. Бұл екі кітапхана Python -да кейбір деректерді өңдеу / қайталау кезінде өте толық. Алайда, бір қарағанда, бұл кітапханалардағы функциялар пайдалы емес болып көрінуі мүмкін, сондықтан олардың ең қызықтысын, соның ішінде оларды қалай тиімді пайдалану керектігін қарастырайық!

  1. Қысу
    күндер = [
    2020-01-01,
    2020-02-04,
    2020-02-01,
    2020-01-24,
    2020-01-08,
    2020-02-10,
    2020-02-15,
    2020-02-11,
    ]

санау = [1, 4, 3, 8, 0, 7, 9, 2]

itertools -дан импорттық компресс
bools = [n> 3 санауда n үшін]
басып шығару (тізім (қысу (күндер, болдар))))) # Compress итераторды қайтарады!

6. Бөлу

Бұл функциямен біз циклды бөлеміз, бірақ бұл жолы предикатты қолдана отырып

# Уақыттың импорттық датасының жасына байланысты бөлу, more_itertools -тің импорттық бөлу күндерінің уақыты = [datetime (2015, 1, 15), datetime (2020, 1, 16), datetime (2020, 1, 17), datetime (2019, 2) , 1), datetime (2020, 2, 2), datetime (2018, 2, 4)] is_old = lambda x: datetime.now () - x