PYTHONLEARNME Telegram 185
✔️ کلاس zip

ببینید zip یک کلاس هست که میاد به عنوان پارامتر های ورودی خودش، iterable (یا iterable هایی) رو به صورت postional argument میگیره و یک zip object به ما برمیگردونه!

شاید بگید iterable چیه؟ iterable میشه چیزی که شما توی پایتون بتونی مثلا روش for بزنی و به اصطلاح iterate کنی! مثل چی؟ مثل list - str - tuple و ...

خوب حالا این zip چطوری کار میکنه 🤔

این کلاس میاد و از iterable هایی که بهش داده شده، به تعداد اون Iterable ها (فرض کنیم n تا) tuple (هایی) به سایز n برامون yield میکنه! حالا اعضای اون tuple که سایزش n هست (یعنی n تا عضو داره) چی هستن؟ zip میاد و اولین عضو رو از اولین iterable و دومین عضو رو از دومین iterable و همینطوری تا آخر میگیره! این تا کی ادامه داره؟ تا زمانی که اعضای کوتاه ترین iterable تمام بشه!

نکته مهم ❗️

کلاس zip هم مثل filter و map و ... یک lazy iterator هست، یعنی چی؟ یعنی جواب رو درجا برای ما محاسبه نمیکنه و هر بار که روش next زده بشه، به ما یک چیزی yield میکنه.

مثال 🧪
names = [
"Ali",
"Mohsen",
"Hassan",
]

last_names = [
"Hassanzadeh",
"Mohammadi",
]

z = zip(names, last_names)

الان هر بار که روی z ما next بزنیم به ما یک tuple به سایز 2 میده (چرا 2 ؟ چون 2 تا iterable بهش دادیم)

>>> next(z)
('Ali', 'Hassanzadeh')

به همین صورت میتونید به لیست، ست و ... این zip object رو تبدیل کنید:

>>> list(z)
[('Ali', 'Hassanzadeh'), ('Mohsen', 'Mohammadi')]

چرا هر tuple دوتا عضو بیشتر نداره؟ چون همونطور که بالا گفتم تعداد به اندازه کوتاه ترین iterable هست که در اینجا last_names کوتاه تر هست و فقط 2 عضو داره!

پس signature کلی کلاس zip به شکل زیر هست (از پایتون 3.10 پارامتر strict بهش اضافه شده که توضیحش میدم)

zip(*iterables, strict=False) —> zip object

خوب ی نکته میمونه، اینکه از پایتون 3.10 به این کلاس یک پارامتری اضافه شده به اسم strict ! کارش چیه؟ مقدارش به صورت پیشفرض False هست، ولی زمانی که شما اون رو True کنید، چک میکنه که همه iterable هایی که بهش دادید آیا طول یکسان دارند یا نه و اگر این شرایط برقرار نبود یک خطای ValueError به شما میده! مثال:

names = [
"Ali",
"Mohsen",
"Hassan",
]

last_names = [
"Hassanzadeh",
"Mohammadi",
]
print(list(zip(names, last_names, strict=True)))

خروجی:

ValueError: zip() argument 2 is shorter than argument 1


#builtins



tgoop.com/pythonlearnme/185
Create:
Last Update:

✔️ کلاس zip

ببینید zip یک کلاس هست که میاد به عنوان پارامتر های ورودی خودش، iterable (یا iterable هایی) رو به صورت postional argument میگیره و یک zip object به ما برمیگردونه!

شاید بگید iterable چیه؟ iterable میشه چیزی که شما توی پایتون بتونی مثلا روش for بزنی و به اصطلاح iterate کنی! مثل چی؟ مثل list - str - tuple و ...

خوب حالا این zip چطوری کار میکنه 🤔

این کلاس میاد و از iterable هایی که بهش داده شده، به تعداد اون Iterable ها (فرض کنیم n تا) tuple (هایی) به سایز n برامون yield میکنه! حالا اعضای اون tuple که سایزش n هست (یعنی n تا عضو داره) چی هستن؟ zip میاد و اولین عضو رو از اولین iterable و دومین عضو رو از دومین iterable و همینطوری تا آخر میگیره! این تا کی ادامه داره؟ تا زمانی که اعضای کوتاه ترین iterable تمام بشه!

نکته مهم ❗️

کلاس zip هم مثل filter و map و ... یک lazy iterator هست، یعنی چی؟ یعنی جواب رو درجا برای ما محاسبه نمیکنه و هر بار که روش next زده بشه، به ما یک چیزی yield میکنه.

مثال 🧪

names = [
"Ali",
"Mohsen",
"Hassan",
]

last_names = [
"Hassanzadeh",
"Mohammadi",
]

z = zip(names, last_names)

الان هر بار که روی z ما next بزنیم به ما یک tuple به سایز 2 میده (چرا 2 ؟ چون 2 تا iterable بهش دادیم)

>>> next(z)
('Ali', 'Hassanzadeh')

به همین صورت میتونید به لیست، ست و ... این zip object رو تبدیل کنید:

>>> list(z)
[('Ali', 'Hassanzadeh'), ('Mohsen', 'Mohammadi')]

چرا هر tuple دوتا عضو بیشتر نداره؟ چون همونطور که بالا گفتم تعداد به اندازه کوتاه ترین iterable هست که در اینجا last_names کوتاه تر هست و فقط 2 عضو داره!

پس signature کلی کلاس zip به شکل زیر هست (از پایتون 3.10 پارامتر strict بهش اضافه شده که توضیحش میدم)

zip(*iterables, strict=False) —> zip object

خوب ی نکته میمونه، اینکه از پایتون 3.10 به این کلاس یک پارامتری اضافه شده به اسم strict ! کارش چیه؟ مقدارش به صورت پیشفرض False هست، ولی زمانی که شما اون رو True کنید، چک میکنه که همه iterable هایی که بهش دادید آیا طول یکسان دارند یا نه و اگر این شرایط برقرار نبود یک خطای ValueError به شما میده! مثال:

names = [
"Ali",
"Mohsen",
"Hassan",
]

last_names = [
"Hassanzadeh",
"Mohammadi",
]
print(list(zip(names, last_names, strict=True)))

خروجی:

ValueError: zip() argument 2 is shorter than argument 1


#builtins

BY 🧑‍💻PythonDev🧑‍💻


Share with your friend now:
tgoop.com/pythonlearnme/185

View MORE
Open in Telegram


Telegram News

Date: |

In handing down the sentence yesterday, deputy judge Peter Hui Shiu-keung of the district court said that even if Ng did not post the messages, he cannot shirk responsibility as the owner and administrator of such a big group for allowing these messages that incite illegal behaviors to exist. Image: Telegram. With the administration mulling over limiting access to doxxing groups, a prominent Telegram doxxing group apparently went on a "revenge spree." The SUCK Channel on Telegram, with a message saying some content has been removed by the police. Photo: Telegram screenshot. The public channel had more than 109,000 subscribers, Judge Hui said. Ng had the power to remove or amend the messages in the channel, but he “allowed them to exist.”
from us


Telegram 🧑‍💻PythonDev🧑‍💻
FROM American