Python-da tushunadigan narsalar ro'yxati

By 08.09.2021 08.09.2021

Python-da ro'yxatlarni yaratishning yanada oqlangan va ixcham usuli

Aug 28, 2020 · 6 min o'qildi

Ro'yxat yaratish

Aytaylik, biz pythonda boshqa takrorlanadigan ob'ekt yoki ketma-ketlikdan, masalan, boshqa ro'yxatdan ro'yxat yaratmoqchimiz. Masalan, bizda raqamlar ro'yxati bor va biz birinchi ro'yxatdagi raqamlarning kublarini o'z ichiga olgan yangi ro'yxat yaratmoqchimiz. Ushbu vazifani bajarishning bir necha yo'li mavjud. Ehtimol, eng asosiy usul for loopidan quyidagicha foydalanishdir:

Yuqoridagi kodda biz for_ loop-dan num_list-ga o'tish uchun foydalanamiz va har bir kubiklangan sonni cube_list-ga qo'shamiz.

Xullas, xuddi shu vazifani bajarishning eng oson yo'li bor va bu ro'yxatni tushunish yordamida amalga oshiriladi.

Tushunishlar ro'yxati

Ro'yxatni tushunish bizga boshqa ketma-ketliklardan ro'yxatlarni juda ixcham shaklda yaratishga imkon beradi. Biz odatda ro'yxatni tushunishdan foydalanamiz, masalan, ro'yxat kabi boshqa ketma-ketlikni ko'rib chiqamiz yoki ma'lum bir shartni qondiradigan elementlarni qo'shamiz yoki ketma-ketlikdagi har bir elementga qo'llaniladigan operatsiya natijasini qo'shamiz.

Python-da tsikl

Python-da enumerate () funktsiyasidan qanday foydalanish

Ro'yxatni tushunishni yozish

Ro'yxatni tushunish qavslardan tashkil topgan bo'lib, ular tarkibida ifoda, keyin for loop, nol yoki undan ko'pi esa, agar yoki agar bo'lsa. Ushbu ro'yxatni tushunish keyinchalik unga ergashgan so'zlar va ifoda kontekstida baholangan ifodani o'z ichiga olgan ro'yxatni yaratadi.

Faqat ifoda va for formasini o'z ichiga olgan asosiy ro'yxatni tushunishdan boshlaymiz:

Masalan, yuqoridagi cube_listni yoki ro'yxatni anglash yordamida boshqa ro'yxatning kublarini o'z ichiga olgan ro'yxatni qanday yaratishni ko'rib chiqamiz:

Xo'sh, ushbu kod satrida nima sodir bo'lmoqda?

Birinchidan, bizda num ** 3ifodasini o'z ichiga olgan qavslar bor , undan keyin for loop, num_list tarkibida. Ichak uchun ichida, Raqambiz ham ustidan Loop deb elementlar uchun berish parametr ismi num_listfaqat yuqorida Loop uchun asl kabi. Biz asosan olib, aytayotgan Sahbizning dan (yoki joriy elementi) num_listcube_list.append (o'xshash bizning ro'yxatiga deb amaliyot, natija qo'shib, keyin kub, uni va Sah ** 3). Shunday qilib, biz num ** 3ifodasining natijasini for forma bo'yicha takrorlanganda, uni o'zimiz tuzayotgan ro'yxatga qo'shamiz .

Eslatma: Ro'yxatni tushunish python-da o'rnatilgan xarita funktsiyasiga juda o'xshash.

Ifodalar haqida eslatma:

Ro'yxatni tushunishda ifoda funktsiyalarni ham o'z ichiga olishi mumkin. Masalan, agar biz satrlar ro'yxatining mos keladigan uzunliklarini o'z ichiga olgan ro'yxat yaratmoqchi bo'lsak, buni quyidagi ro'yxatni tushunish bilan qilishimiz mumkin:

O'rnatilgan len funktsiyasini ro'yxatni tushunishda o'z ifodamizning bir qismi sifatida qanday foydalanganimizga e'tibor bering.

Python-da bilishingiz kerak bo'lgan to'rtta narsa

Python-da ketma-ketlikni qanday ajratish, ketma-ketliklarni aylantirish, takrorlanadigan fayllarni zip / ochish va boshqalarni o'rganing

Vaziyat bilan tushunishni ro'yxati

Shuningdek, for loopidan keyin if iborasi yordamida bizning ro'yxatimiz tushunchalariga shart qo'sha olamiz:

Masalan, biz num_listdan faqat toq sonlarning kublarini o'z ichiga olgan yangi ro'yxat tuzmoqchimiz deylik. Buni quyidagi ro'yxatni tushunish bilan amalga oshiramiz:

Oxiriga if ifodasini qanday qo'shganimizga e'tibor bering. Shunday qilib, num ** 3faqat modul operatori yordamida joriy element yoki numg'alati bo'lsa, bizning cubes_of_oddsro'yxatimizga qo'shiladi . Modulo operatori numni 2 ga bo'linganda qoldiqni qaytaradi, agar numjuft bo'lsa nolga teng bo'ladi .

Agar biz bir nechta shartlarni xohlasak nima bo'ladi?

Biz nafaqat if iborasini qo'shishimiz mumkin, balki quyidagi formatdan foydalanib else operatorini ham qo'shishimiz mumkin:

[ agar boshqa uchun ]

Masalan, biz num_list orqali o'tishni istaymiz va toq sonlarning kublari va juft sonlarning kvadratlari bilan yangi ro'yxat tuzamiz. Buni quyidagi kod yordamida amalga oshirishimiz mumkin:

Shunday orqali biz pastadir sifatida num_listbo'lsa, Raqam% 2! = 0deb aniq uchun haq Sahyoki element, Raqam ** 3deb aniq element uchun ifodasi sifatida ishlatiladi. Agar num% 2! = 0To'g'ri bo'lmasa, uning o'rniga element uchun num ** 2ifodasi ishlatiladi.

Ichki ro'yxatni tushunish

Ro'yxatni tushunishda ifoda yana bir ro'yxatni anglash bo'lishi mumkin. Masalan, quyidagi matritsani (yoki 2 o'lchovli qatorni) yaratmoqchimiz:

E'tibor bering, u to'rt qatordan iborat bo'lib, ularning har bir qatorida 1 dan 4 gacha bo'lgan raqamlar mavjud. Boshqacha aytganda, bu to'rtta bir xil ro'yxatni o'z ichiga olgan ro'yxat, ularning har biri [1,2,3,4].

Ushbu matritsani tashqi for loopdan tashqari, ro'yxatni tushunib, quyidagicha qilishimiz mumkin:

For tsikli to'rtta takrorlanishga ega va har bir takrorlashda ro'yxatni tushunish bilan ro'yxat tuziladi: [x oralig'idagi x uchun (1,5)]. Ushbu ro'yxatni tushunish [1,2,3,4] ro'yxatini yaratadi. Shunday qilib biz [1,2,3,4] to'rtta ro'yxatni o'z ichiga olgan ro'yxatni yaratmoqdamiz.

Yuqoridagi kod quyidagi ichki ro'yxatni tushunishga teng:

Shunday qilib, biz [1,2,3,4] ro'yxatini yaratadigan [ 1,5 (1,5)] oralig'idagi x uchun xro'yxatni tushunadigan boshlang'ich ifodani bajaramiz . Ushbu ibora loop uchun sekundining har bir takrorlanishi bilan bajariladi, har safar [1,2,3,4] ro'yxatini yaratadi va tashqi ro'yxatga qo'shadi.

Python-da Reduce-dan foydalanish

Pythonda kamaytirish funktsiyasidan qanday foydalanish

Tushunishlar ro'yxati va xarita va filtr funktsiyalari

Ro'yxatni anglash elementlarga biron bir operatsiyani qo'llash, elementlarni filtrlash yoki ikkalasining kombinatsiyasini qo'shish orqali boshqa ketma-ketliklar ro'yxatini yaratish uchun ishlatiladi. Boshqacha qilib aytganda, ro'yxatni tushunishda o'rnatilgan xarita va filtr funktsiyalari kabi bir xil funktsiyalar bo'lishi mumkin. Har bir elementga qo'llaniladigan operatsiya xarita funktsiyasiga o'xshashdir va agar siz ro'yxatni tushunishda elementlar ro'yxatiga qo'shiladigan shart qo'shsangiz, bu filtrlash funktsiyasiga o'xshashdir. Shuningdek, ro'yxatni tushunish boshida qo'shilgan ibora xarita va filtr funktsiyalari ichida ishlatilishi mumkin bo'lgan lambda ifodasiga o'xshaydi.

Masalan, ushbu ro'yxatni tushunish keyingi xarita va filtr (lambda ifodasi bilan) misoliga teng:

Ushbu element ro'yxati 0 dan 9 gacha bo'lgan kvadratni qo'shadi, faqat element teng bo'lsa.

Xarita funktsiyasiga o'tgan funktsiya lambda ifodasi bo'lib, u x kiritishni oladi va uning kvadratini qaytaradi. Xarita funktsiyasiga kiritilgan ro'yxat 0 dan 9 gacha bo'lgan juft elementlarni o'z ichiga olgan filtrlangan ro'yxatdir.

Ikkalasi ham quyidagi ro'yxatni yaratadi: [0, 4, 16, 36, 64]