انجام تکرار موازی با استفاده از zip() در پایتون

آیا تا به حال کلمه “تکرار موازی” را شنیده اید یا زمانی که در پایتون برنامه نویسی می کردید سعی کرده اید “روی چندین تکرار به صورت موازی حلقه بزنید”؟
این آموزش یک پایتون را نشان می دهد zip()
عملکردی که به ما کمک می کند تا a تکرار موازی بر روی چندین تکرار.
تعریف
zip()
تابع تکرارپذیرها را می گیرد و به صورت موازی روی آنها تکرار می کند، که منجر به تولید تاپلی از هر آیتم از تکرارپذیر می شود.
items = ["Computer", "Keyboard", "CPU", "Mouse"]
units = [3, 2, 4, 6]
mapping = zip(items, units)
print(tuple(mapping))
خروجی
(('Computer', 3), ('Keyboard', 2), ('CPU', 4), ('Mouse', 6))
به عبارت دیگر، آن را برمی گرداند تکرار کننده تاپل ها جایی که اولین مورد در هر تکرار کننده پاس شده با هم جفت می شود و سپس مورد دوم در هر تکرار کننده پاس شده با هم جفت می شود و آن تا زمانی که کوتاه ترین تکرار کننده تمام شود، ادامه می یابد.
راه دیگری برای فکر کردن
zip()
این است که ردیف ها را به ستون و ستون ها را به ردیف تبدیل می کند. این شبیه به جابجایی یک ماتریس. منبع است
نحو
سینتکس پایتون zip()
تابع است:
zip(*iterables)
یا zip(iterator1, iterator2, ...)
در پایتون 3.10، strict
استدلال اضافه شد
zip(*iterables, strict=False)
استفاده از آن را خواهیم دید strict
پیش در این آموزش
zip()
مولفه های:
iterables
: آنها می توانند لیست ها، تاپل ها، دیکشنری ها یا اشیایی باشند که می توانند تکرار شوند.
مثال
languages = ["Python", "JavaScript", "C", "C++"]
founded = [1991, 1995, 1972, 1985]
mapping = zip(languages, founded)
print(list(mapping))
print(type(list(mapping)))
خروجی
[('Python', 1991), ('JavaScript', 1995), ('C', 1972), ('C++', 1985)]
<class 'list'>
کارکردن تابع zip().
چگونه zip()
تابع یک تکرار کننده از تاپل ایجاد می کند؟
در واقع می توان گفت که زیپ به معنای جمع کردن دو چیز مجزا در یک چیز است.
درست مثل آن، پایتون zip()
تابع با گرفتن دو ورودی کار می کند A1
و A2
، و سپس تجمیع آیتم از همان شماره شاخص از A1
و A2
.
از طریق تصویر زیر بهتر متوجه خواهیم شد
-
ما به وضوح میتوانیم در سمت راست ببینیم – تاپلی در شاخص 0 شامل هر مورد از است
A1
وA2
به ترتیب در شاخص 0. -
همین امر در مورد موارد در شاخص 1 صدق می کند
A1
وA2
. -
به طور کلی، تاپل در شاخص
i
شامل مواردی در فهرست استi
که درA1
وA2
.
به طور رسمی تر: zip() یک تکرار کننده از تاپل ها را برمی گرداند، که در آن تاپل i-ام حاوی عنصر i-ام از هر یک از تکرارپذیرهای آرگومان است.منبع
تکرار شونده با طول های مختلف
چه اتفاقی می افتد اگر تکرار شونده ها دارای طول های مختلف باشند؟
هیچ اتفاقی نمی افتد اگر تکرارها به آن منتقل شوند zip()
تابع طول های مختلفی دارد زیرا اگر به اسناد رسمی پایتون مراجعه کنیم، آن را بیان می کند “تکرارگر زمانی متوقف می شود که کوتاه ترین تکرار تمام شود”.
مثال
languages = ["Python", "JavaScript", "C", "C++"]
founded = [1991, 1995, 1972]
mapping = zip(languages, founded)
print(list(mapping))
خروجی
[('Python', 1991), ('JavaScript', 1995), ('C', 1972)]
اینجا C++
حذف شد زیرا founded
متغیر فقط شامل سه آرگومان است.
اگر پایتون در زمانی که تکرارپذیرها با طول های مختلف هستند، خطایی ایجاد کند چه؟
بیایید با یک مثال بفهمیم
languages = ["Python", "JavaScript", "C", "C++"]
founded = [1991, 1995, 1972]
mapping = zip(languages, founded, strict=True)
print(list(mapping))
خروجی
Traceback (most recent call last):
....
ValueError: zip() argument 2 is shorter than argument 1
آیا متوجه شدید که یک استدلال اضافی وجود دارد strict=True
در کد؟
را strict
آرگومان اضافه شده است پایتون نسخه 3.10
اگر تکرار شونده ها طول های متفاوتی داشته باشند و از آن استفاده کنیم strict
آرگومان، کد a را پرتاب می کند ValueError
. می تواند برای رفع اشکال مفید باشد.
ارسال یک یا هیچ تکراری به zip()
را zip()
اگر هیچ پارامتری ارسال نشود، تابع یک تکرار کننده خالی برمی گرداند.
no_iterable = zip()
print(list(no_iterable))
خروجی
[]
اگر فقط یک تکرار را پاس کنیم، zip()
تابع یک تکرار کننده از تاپل ها را برمی گرداند که هر کدام فقط یک عنصر دارند.
languages = ["Python", "JavaScript", "C", "C++"]
mapping = zip(languages)
print(list(mapping))
خروجی
[('Python',), ('JavaScript',), ('C',), ('C++',)]
مثال های زیپ() پایتون
مثال: استفاده از شمارش () تابع با zip()
characters = ["Iron Man", "Thor", "Spiderman"]
real_names = ["RDJ", "Chris Hemsworth", "Andrew Garfield"]
result = zip(characters, real_names)
for num, results in enumerate(result):
print(num, results)
خروجی
0 ('Iron Man', 'RDJ')
1 ('Thor', 'Chris Hemsworth')
2 ('Spiderman', 'Andrew Garfield')
مثال: استفاده از تابع range().
name = ["Sachin", "Rishu", "Yashwant", "Abhishek"]
values = zip(range(4), name)
print(tuple(values))
خروجی
((0, 'Sachin'), (1, 'Rishu'), (2, 'Yashwant'), (3, 'Abhishek'))
مثال: داشتن چندین تکرار
characters = ["Iron Man", "Thor", "Spiderman"]
real_names = ["RDJ", "Chris Hemsworth", "Andrew Garfield"]
reel_names = ["Tony Stark", "Thor", "Peter Parker"]
result = zip(characters, real_names, reel_names)
print(list(result))
خروجی
[('Iron Man', 'RDJ', 'Tony Stark'), ('Thor', 'Chris Hemsworth', 'Thor'), ('Spiderman', 'Andrew Garfield', 'Peter Parker')]
مثال: Typecasting به انواع داده های مختلف
تایپ کست کردن در لیست
characters = ["Iron Man", "Thor", "Spiderman"]
real_names = ["RDJ", "Chris Hemsworth", "Andrew Garfield"]
result = zip(characters, real_names)
print(f"List: {list(result)} and type is {type(list(result))}")
خروجی
List: [('Iron Man', 'RDJ'), ('Thor', 'Chris Hemsworth'), ('Spiderman', 'Andrew Garfield')] and type is <class 'list'>
تایپ کست به دیکشنری
characters = ["Iron Man", "Thor", "Spiderman"]
real_names = ["RDJ", "Chris Hemsworth", "Andrew Garfield"]
result = zip(characters, real_names)
print(f"Dictionary: {dict(result)} and type is {type(dict(result))}")
خروجی
Dictionary: {'Iron Man': 'RDJ', 'Thor': 'Chris Hemsworth', 'Spiderman': 'Andrew Garfield'} and type is <class 'dict'>
تایپ کست کردن در مجموعه
characters = ["Iron Man", "Thor", "Spiderman"]
real_names = ["RDJ", "Chris Hemsworth", "Andrew Garfield"]
result = zip(characters, real_names)
print(f"Set: {set(result)} and type is {type(set(result))}")
خروجی
Set: {('Iron Man', 'RDJ'), ('Spiderman', 'Andrew Garfield'), ('Thor', 'Chris Hemsworth')} and type is <class 'set'>
تایپ کست به تاپل
characters = ["Iron Man", "Thor", "Spiderman"]
real_names = ["RDJ", "Chris Hemsworth", "Andrew Garfield"]
result = zip(characters, real_names)
print(f"Tuple: {tuple(result)} and type is {type(tuple(result))}")
خروجی
Tuple: (('Iron Man', 'RDJ'), ('Thor', 'Chris Hemsworth'), ('Spiderman', 'Andrew Garfield')) and type is <class 'tuple'>
باز کردن زیپ مقادیر
ما در واقع می توانیم مقادیر را از حالت فشرده خارج کنید آن بود قبلا زیپ شده. بیایید ببینیم چگونه این کار را انجام دهیم.
این را می توان با کمک انجام داد *
عملگر ستاره
بیایید با یک مثال بفهمیم.
characters = ["Iron Man", "Thor", "Spiderman"]
real_names = ["RDJ", "Chris Hemsworth", "Andrew Garfield"]
reel_names = ["Tony Stark", "Thor", "Peter Parker"]
mapping = zip(characters, real_names, reel_names)
mapped = list(mapping)
print(f"Zipped result: {mapped}", end="")
print("\n")
# unzipping values
char, real, reel = zip(*mapped)
print("Unzipped result:")
print(f"The characters list is : {char}")
print(f"The real_names list is : {real}")
print(f"The reel_names list is : {reel}")
خروجی
Zipped result: [('Iron Man', 'RDJ', 'Tony Stark'), ('Thor', 'Chris Hemsworth', 'Thor'), ('Spiderman', 'Andrew Garfield', 'Peter Parker')]
Unzipped result:
The characters list is : ('Iron Man', 'Thor', 'Spiderman')
The real_names list is : ('RDJ', 'Chris Hemsworth', 'Andrew Garfield')
The reel_names list is : ('Tony Stark', 'Thor', 'Peter Parker')
توجه کنید که چگونه مقادیر متغیر را از حالت فشرده خارج کردیم mapped
استفاده كردن *
و برای ذخیره مقادیر زیپ نشده سه متغیر اعلام کردیم char
، real
و reel
نتیجه
در این آموزش، شما یاد گرفتید که با استفاده از Python یک تکرار موازی انجام دهید zip()
عملکرد و امیدوارم نحوه استفاده از آن را درک کرده باشید.
شما اکنون درک می کنید که چگونه zip()
تابع در پشت صحنه برای تولید یک تکرار کننده چندگانه کار می کند.
برای درک بهتر کد، تکه های کد نوشته شده در بالا در IDE های خود را امتحان کنید.
🏆اگر این مقاله را دوست داشتید، ممکن است به مقالات دیگری علاقه مند شوید
✅چگونه بایت ها را در پایتون به رشته تبدیل کنیم؟
✅f-string: روشی پیشرفته و مدرن برای قالب بندی رشته ها.
✅چگونه به مقادیر لیست در دیکشنری در پایتون دسترسی پیدا کنیم؟
✅چگونه از __str__ و __repr__ برای تغییر نمایش رشته اشیاء در پایتون استفاده کنیم؟
✅توابع sort() و sorted() چه تفاوتی با یکدیگر دارند؟
✅تفاوت seek() و tell() در پایتون چیست؟
✅چگونه از ماژول tempfile برای ایجاد فایل های موقت و dirs در پایتون استفاده کنیم؟
فعلاً همین است.
به کدنویسی ادامه دهید✌✌