Python-дағы сіз білмейтін 7 айла-шарғы
Мұқаммедәли
Python - соңғы он жылдықта айтарлықтай өсіп, қарқынды дамып келе жатқандығы шүбәсіз. Өз мықтылығын үнемі дәлелдейтін тіл.
Ал енді сол мықтылығына тағы бір рет куә болайық ;)
Мысалдардың көбісі Python-ның тек үшінші нұсқасында істейді.
1. Сөздікті мәндері бойынша сұрыптау
Сөздіктерді (dictionary) деректерді сақтауға арналған кесте ретінде қолдану тәжірибесі кең таралған. Сөздік деректерін кілттері бойынша емес, кілттердің мәндері бойынша сұрыптау көбінесе тупикка әкеп жатады. Бұл мәселе key аргументтінде салыстыру алдында әр элементке шақырылатын функцияны көрсету арқылы оңай шешіледі:
>>> d = {'алма': 40, 'апельсин': 80, 'банан': 70}
>>> sorted(d, key=d.get)
['алма', 'банан', 'апельсин']
2. Тізімнің жиі кездесетін элементтерін табу
Егер сізге ең көп кездесетін мәндерді табу керек болса, collections кітапханасынан Counter қолданған жөн:
>>> from collections import Counter
>>> a = ['a', 'b', 'c', 'a', 'b', 'c', 'b', 'b', 'd', 'e', 'a']
>>> cnt = Counter(a)
>>> cnt.most_common(3)
[('b', 4), ('a', 3), ('c', 2)]
Counter.most_common(n) амалы n кортеж қайтарады, кортеждердің бірінші мәні - элемент, екіншісі - сол элементтің саны.
3. Тізімдерді циклсыз біріктіру
Ұзындығы әртүрлі тізімдердің элементтерін циклден өткізбей-ақ қалай біріктірер едіңіз? Оны былай оп-оңай шешсе болады, үйреншікті sum функциясын қолданамыз. Бірінші аргументке тізімдерді жинаған тізім беріп, екінші аргументке бос тізім береміз. Сол бос тізімге бірінші аргументтегі ішкі тізімдер қосылады:
>>> L = [[1, 2, 3], [4, 5], [6], [7, 8, 9]] >>> sum(L, []) [1, 2, 3, 4, 5, 6, 7, 8, 9]
Басқа тәсілде бар, сәл ұзындау болады. Ештеңе етпес ;) Зато тиімділігі жоғары амал, itertools модулін қолданамыз.
import itertools L = [[1, 2, 3], [4, 5], [6], [7, 8, 9]] >>>list(itertools.chain.from_iterable(L)) [1, 2, 3, 4, 5, 6, 7, 8, 9]
Айтпақшы, тізімдермен жұмыстарда қажет болатын көптеген пайдалы шешімдер collections және itertools - та дайын.
4. Тізімнің реттілігін сақтай отырып тізімдегі көшірмелерді жою
Тізімдегі қайталанған элементтерді жою үшін жиындарды (set) пайдалану жиі қолданылатын тәсіл:
>>> items = [2, 2, 3, 3, 1] >>> list(set(items)) [1, 2, 3]
Бірақ жиындарды пайдалану барысында реттілік сақталмайды.
Реттілікті сақтай отырып көшірмелерді жою үшін collections.OrderedDict дерек типін қолданса болады. Бұл кәдімгі сөздікке (dictionary) ұқсайды, бірақ бір ерекшелігі тізімнің элементтері ретімен кілттерге берілген. Кілттерді шақыру арқылы, біз реттілігін бұзбай тазартылған тізім алып шыға аламыз:
from collections import OrderedDict items = [2, 2, 3, 3, 1] >>> d = OrderedDict.fromkeys(items) >>> list(d.keys()) [2, 3, 1]
5. Жолдарды біріктіру
Көбінесе қосу белгісі арқылы жолдарды (string) конкатенациялап жатамыз. Алайда жолдарға толы тізім кездесіп қалса join амалы арқылы бір жолға біріктірген ыңғайлы:
>>> a = ["Python", "-", "керемет", "тіл."] >>> " ".join(a) 'Python - керемет тіл.'
Ал мында қиынырақ мысал, санды тізімді жолға айналдыру:
>>> numbers = [1, 2, 3, 4, 5] >>> ', '.join(map(str, numbers)) '1, 2, 3, 4, 5'
Сосын join амалы циклдан қарағанда жылдам екенін ұмытпайық.
6. zip функциясы
zip функциясы бірнеше тізімдердің элементтерін белгілі бір комбинациямен біріктіретін итератор жасайды. Бұл бізге for циклі арқылы бірнеше, не оданда көп тізімдердің бойымен бір мезетте (параллельді) жүгіріп өтуге немесе бір мезетте сұрыптау жүргізуге мүмкіндік береді.
Ал міне zip функциясымен мысал:
>>> list_a = [0, 1, 2]
>>> list_b = ['zero', 'one', 'two']
>>> list_c = ['cero', 'uno', 'dos']
>>> list(zip(list_a, list_b, list_c))
[(0, 'zero', 'cero'), (1, 'one', 'uno'), (2, 'two', 'dos')]
>>> for a, b, c in zip(list_a, list_b, list_c):
... print(f'{a} is {b} in English and {c} in Spanish.')
...
0 is zero in English and cero in Spanish.
1 is one in English and uno in Spanish.
2 is two in English and dos in Spanish.
Біріктірілген элементтерді бұрыңғы қалпына қайтару үшін * операторын қолданамыз.
>>> z = list(zip(list_a, list_b, list_c))
>>> a, b, c = zip(*z)
>>> a
(0, 1, 2)
>>> b
('zero', 'one', 'two')
>>> c
('cero', 'uno', 'dos')
7. enumerate функциясы
Басында enumerate функциясы түсінуге қиын көрінуі мүмкін, бірақ жақсы түсініп, алып кетсеңіз көп жағдайда сізге пайдасын тигізеді. enumerate функциясы for циклінде жиі қолданылатын автоматты санауыш жасайды.
Осындай циклдарда бұрынғыдайcounter = 0деп айнымалы жасап,counter += 1деп оны өсіріп санау қажет емес.
for циклдарын құруда zip және enumerate таптырмас құралдар.
>>> upperCase = ['A', 'B', 'C', 'D', 'E', 'F']
>>> lowerCase = ['a', 'b', 'c', 'd', 'e', 'f']
>>> for count, (upper, lower) in enumerate(zip(upperCase, lowerCase), 1):
... print(f'{count}: {upper} and {lower}.')
...
1: A and a.
2: B and b.
3: C and c.
4: D and d.
5: E and e.
6: F and f.
Бұл жердегі count автоматты санауыш ретінде қолданылып тұр.
Кішігірім бонус
Оқып болдыңыз ба? Болсаңыз, интерпретаторда import this командасы арқылы шығатын Python Дзені жайлы білетін шығарсыз. Айтпағым python-ның үшінші нұсқасында басқада «пасхалкалар» тығылған:
import antigravity import __hello__
Байланыс:
Telegram: it_bilimkz
Instagram: it_bilim.kz
Telegram chat: it_bilim_chat