itertools - توابع ایجاد تکرارها برای حلقه کارآمد

ساخت وبلاگ

این ماژول تعدادی از بلوک های ساختمانی را با الهام از سازه های APL ، Haskell و SML پیاده سازی می کند. هر یک به صورت مناسب برای پایتون تجدید می شود.

این ماژول مجموعه اصلی ابزارهای سریع و کارآمد حافظه را که توسط خودشان یا در ترکیب مفید هستند ، استاندارد می کند. آنها با هم ، "جبر تکرار ساز" را تشکیل می دهند و امکان ساخت ابزارهای تخصصی به طور خلاصه و کارآمد در پایتون خالص را فراهم می کند.

به عنوان مثال ، SML یک ابزار جدول بندی را ارائه می دهد: Tabulate (f) که یک توالی f (0) ، f (1) ، تولید می کند. بشربا ترکیب نقشه () و شمارش () برای تشکیل نقشه (f ، count ()) می توان در پایتون نیز به دست آورد.

این ابزارها و همتایان داخلی آنها نیز با عملکردهای پر سرعت در ماژول اپراتور به خوبی کار می کنند. به عنوان مثال ، اپراتور ضرب را می توان در دو بردار نقشه برداری کرد تا یک محصول نقطه کارآمد را تشکیل دهد: جمع (MAP (Operator. Mul ، Vector1 ، Vector2)).

تکرارهای بی نهایت:

شروع ، شروع+مرحله ، شروع+2*مرحله ، ...

count(10) >10 11 12 13 14.

P0 ، P1 ،… پلاستیک ، P0 ، P1 ،…

cycle('ABCD') >a b c d a b c d.

Elem ، Elem ، Elem ،… بی پایان یا تا n بار

repeat(10, 3) >10 10 10

تکرار در کوتاهترین دنباله ورودی خاتمه می یابد:

accumulate([1,2,3,4,5]) >1 3 6 10 15

P0 ، P1 ،… پلاستیک ، Q0 ، Q1 ،…

chain('ABC', 'DEF') >a b c d e f

P0 ، P1 ،… پلاستیک ، Q0 ، Q1 ،…

chain.from_iterable(['ABC', 'DEF']) >a b c d e f

(D [0] اگر S [0]) ، (D [1] اگر S [1]) ،…

compress('ABCDEF', [1,0,1,0,1,1]) >a c e f

Seq [n] ، seq [n+1] ، از زمانی که پیش بینی می شود شروع می شود

Dropwhile (Lambda X: x 6 4 1

عناصر SEQ که در آن Pred (Elem) نادرست است

filterfalse(lambda x: x%2, range(10)) >0 2 4 6 8

زیرمجموعه های فرعی با ارزش کلید (V) گروه بندی می شوند

SEQ ، [شروع ،] توقف [، مرحله]

عناصر از SEQ [شروع: توقف: مرحله]

islice('ABCDEFG', 2, None) >C D E F G

pairwise('ABCDEFG') >ab bc cd de ef fg

starmap(pow, [(2,5), (3,2), (10,3)]) >32 9 1000

SEQ [0] ، SEQ [1] ، تا زمانی که پیش از شکست بخورد

Takyly (Lambda X: X 1 4

it1 ، it2 ،… itn یک تکرار کننده را به n تقسیم می کند

zip_longest('ABCD', 'xy', fillvalue='-') >تبر توسط c- d-

تکرارهای ترکیبی:

محصول دکارتی ، معادل یک حلقه تو در تو

Tuples به طول R ، تمام سفارشات ممکن ، بدون عنصر مکرر

Tuples به طول R ، به ترتیب مرتب شده ، هیچ عنصر مکرر وجود ندارد

Tuples به طول R ، به ترتیب مرتب شده ، با عناصر مکرر

aa ab ac ad ba bc bc bd cl cc cd da db dc dd

Ab ac ad ba bc bd ca cb cd da db dc

CD AB AC AD BC BD CD

AA AB AC AD BB BC BD CC CD DD

توابع itertool ¶

ماژول زیر همه تکرار سازها را ساخت و باز می گرداند. برخی از آنها جریان های نامحدودی را ارائه می دهند ، بنابراین فقط باید با توابع یا حلقه هایی که جریان را کوتاه می کنند ، به آنها دسترسی پیدا کرد.

itertoolsجمع کنید (قابل تکرار [، عملکرد ، * ، اولیه = هیچ]) ¶

یک تکرار کننده ایجاد کنید که مبالغ انباشته شده را بازگرداند ، یا نتایج انباشته شده سایر توابع باینری (که از طریق آرگومان اختیاری اختیاری مشخص شده است).

در صورت تهیه عملکرد ، باید تابعی از دو آرگومان باشد. عناصر ورودی قابل تکرار ممکن است هر نوع باشد که می تواند به عنوان استدلال برای عملکرد پذیرفته شود.(به عنوان مثال ، با عملکرد پیش فرض علاوه بر این ، عناصر ممکن است هر نوع افزودنی از جمله اعشاری یا کسری باشند.)

معمولاً تعداد خروجی عناصر با ورودی قابل تکرار مطابقت دارد. اما اگر آرگومان کلیدی اولیه ارائه شود ، تجمع با مقدار اولیه منجر می شود تا خروجی یک عنصر بیشتر از ورودی ورودی داشته باشد.

تقریباً معادل:

تعدادی کاربرد برای استدلال Func وجود دارد. برای حداقل در حال اجرا ، حداکثر () برای حداکثر در حال اجرا ، یا اپراتور. mul () برای یک محصول در حال اجرا می توان آن را حداقل () تنظیم کرد. جداول استهلاک را می توان با انباشت بهره و اعمال پرداخت ها ساخته شد:

برای یک عملکرد مشابه که فقط مقدار انباشته نهایی را برمی گرداند ، به functools. reduce () مراجعه کنید.

جدید در نسخه 3. 2.

تغییر در نسخه 3. 3: پارامتر عملکرد اختیاری اضافه شده است.

تغییر در نسخه 3. 8: پارامتر اولیه اختیاری اضافه شد.

یک تکرار کننده درست کنید که عناصر را از اولین تکرار برگرداند تا زمانی که خسته شود ، سپس به تکرار بعدی ادامه یابد ، تا زمانی که تمام موارد تکرار شده خسته شوند. برای درمان توالی های متوالی به عنوان یک دنباله واحد استفاده می شود. تقریباً معادل:

سازنده جایگزین برای زنجیره (). ورودی های زنجیر شده از یک آرگومان قابل تکرار واحد که تنبل ارزیابی می شود ، زنجیر می شود. تقریباً معادل:

بازگشت به طول R از عناصر را از ورودی قابل برگشت برگردانید.

Tuples ترکیبی با توجه به ترتیب ورودی قابل تکرار ، در سفارش واژگونی ساطع می شود. بنابراین ، اگر ورودی ورودی طبقه بندی شود ، تاپل های خروجی به ترتیب مرتب شده تولید می شوند.

بر اساس موقعیت آنها ، عناصر بی نظیر رفتار می شوند ، نه بر ارزش آنها. بنابراین اگر عناصر ورودی بی نظیر باشند ، در هر ترکیب مقادیر مکرر وجود نخواهد داشت.

تقریباً معادل:

کد برای ترکیبات () همچنین می تواند به عنوان پی در پی جابجایی ها () پس از فیلتر کردن ورودی ها که عناصر به ترتیب مرتب سازی نشده (با توجه به موقعیت آنها در استخر ورودی) بیان نشده است:

تعداد موارد برگشتی N است!/ r!/ (N-R)! وقتی 0 n.

itertoolscombinations_with_replaction (قابل تکرار ، r)

بازگشت به طول R را از عناصر از ورودی قابل تکرار برگردانید و به عناصر فردی اجازه می دهد بیش از یک بار تکرار شود.

Tuples ترکیبی با توجه به ترتیب ورودی قابل تکرار ، در سفارش واژگونی ساطع می شود. بنابراین ، اگر ورودی ورودی طبقه بندی شود ، تاپل های خروجی به ترتیب مرتب شده تولید می شوند.

بر اساس موقعیت آنها ، عناصر بی نظیر رفتار می شوند ، نه بر ارزش آنها. بنابراین اگر عناصر ورودی بی نظیر باشند ، ترکیبات تولید شده نیز بی نظیر خواهند بود.

تقریباً معادل:

کد برای Combinations_With_Replaction () را می توان به عنوان پی در پی محصول () پس از فیلتر کردن مدخل ها که عناصر به ترتیب مرتب نشده (با توجه به موقعیت آنها در استخر ورودی) بیان نمی کنند ، بیان کرد:

The number of items retued is (n+r-1)! / r! / (n-1)! when n>0

جدید در نسخه 3. 1.

یک تکرار کننده ایجاد کنید که عناصر را از داده های بازگرداندن فقط آنهایی که یک عنصر مربوطه در انتخاب کنندگان دارند که به درستی ارزیابی می کنند ، برگردانید. هنگامی که داده ها یا انتخاب کنندگان upables خسته شده اند ، متوقف می شود. تقریباً معادل:

جدید در نسخه 3. 1.

یک تکرار کننده ایجاد کنید که مقادیر مساوی را با شروع از شروع تعداد شروع می کند. اغلب به عنوان استدلال برای نقشه برداری () برای تولید نقاط داده متوالی استفاده می شود. همچنین ، با استفاده از zip () برای افزودن شماره های دنباله استفاده می شود. تقریباً معادل:

هنگام شمارش با شماره های نقطه شناور ، گاهی اوقات با جایگزینی کد ضرب مانند: (شروع + مرحله * i را برای من در شمارش ()) می توان دقت بهتری حاصل کرد.

در نسخه 3. 1 تغییر یافته است: آرگومان مرحله اضافه شده و به استدلال های غیر پیرزن اجازه می دهد.

یک تکرار کننده عناصر را از مجری و صرفه جویی در یک نسخه از هر یک تهیه کنید. هنگامی که تکرار شود ، عناصر را از نسخه ذخیره شده بازگردانید. به طور نامحدود تکرار می شود. تقریباً معادل:

توجه داشته باشید ، این عضو از ابزار ابزار ممکن است نیاز به ذخیره کمکی قابل توجهی (بسته به طول تکرار) داشته باشد.

itertoolsقطره (محمول ، قابل تکرار)

تا زمانی که محمول صحیح باشد ، یک تکرار کننده ایجاد کنید که عناصر را از تکرار دور کند. پس از آن ، هر عنصر را برمی گرداند. توجه داشته باشید ، تا زمانی که محمول اول نادرست شود ، تکرار کننده هیچ خروجی تولید نمی کند ، بنابراین ممکن است زمان راه اندازی طولانی داشته باشد. تقریباً معادل:

یک تکرار کننده ایجاد کنید که عناصر را از بازگشت قابل تکرار فیلتر کند و فقط مواردی را که محمول برای آن نادرست است ، بازگرداند. اگر گزاره ای نیست ، مواردی را که نادرست است برگردانید. تقریباً معادل:

یک تکرار کننده ایجاد کنید که کلیدها و گروه های متوالی را از مجوز بازگرداند. کلید تابعی است که یک مقدار کلید را برای هر عنصر محاسبه می کند. اگر مشخص نشده باشد یا هیچ کدام نیست ، پیش فرض کلیدی به یک عملکرد هویت و عنصر بدون تغییر را برمی گرداند. به طور کلی ، مجری باید از قبل بر روی همان عملکرد کلیدی مرتب شود.

عملکرد GroupBy () مشابه فیلتر UNIQ در یونیکس است. این یک گروه استراحت یا گروه جدیدی ایجاد می کند هر بار که مقدار عملکرد کلید تغییر می کند (به همین دلیل معمولاً لازم است داده ها را با استفاده از همان عملکرد کلیدی مرتب کنید). این رفتار با گروه SQL متفاوت است که با توجه به ترتیب ورودی آنها ، عناصر مشترک را جمع می کند.

گروه برگشتی خود یک تکرار کننده است که زیربنایی را با GroupBy () به اشتراک می گذارد. از آنجا که منبع به اشتراک گذاشته می شود ، هنگامی که شیء GroupBy () پیشرفته است ، گروه قبلی دیگر قابل مشاهده نیست. بنابراین ، اگر این داده ها بعداً مورد نیاز است ، باید به عنوان لیست ذخیره شود:

Groupby () تقریباً معادل:

یک تکرار کننده درست کنید که عناصر منتخب را از طریق قابل برگشت بازگرداند. اگر شروع غیر صفر باشد ، تا رسیدن به شروع عناصر از inteable از بین می روند. پس از آن ، عناصر به طور متوالی بازگردانده می شوند مگر اینکه مرحله بالاتر از یک مورد تنظیم شود که منجر به رد شدن موارد می شود. اگر توقف وجود ندارد ، تکرار تا زمانی که تکرار شود ، اگر اصلاً خسته نشود ، ادامه می یابد. در غیر این صورت ، در موقعیت مشخص متوقف می شود.

اگر شروع هیچ کدام نیست ، تکرار از صفر شروع می شود. اگر مرحله ای نباشد ، مرحله پیش فرض به یک است.

بر خلاف برش منظم ، Islice () از مقادیر منفی برای شروع ، توقف یا مرحله پشتیبانی نمی کند. می توان برای استخراج زمینه های مرتبط از داده هایی که ساختار داخلی مسطح شده است استفاده شود (برای مثال ، یک گزارش چند خط ممکن است یک قسمت نام را در هر خط سوم لیست کند).

تقریباً معادل:

جفت های همپوشانی پی در پی گرفته شده از ورودی قابل تکرار را برگردانید.

تعداد 2 عکس در تکرار خروجی یک کمتر از تعداد ورودی ها خواهد بود. اگر ورودی قابل تکرار کمتر از دو مقدار باشد خالی خواهد بود.

تقریباً معادل:

جدید در نسخه 3. 10.

بازگرداندن طول R متوالی از عناصر در تکرار پذیر.

اگر R مشخص نشده باشد یا هیچ کدام نباشد ، R به طور پیش فرض به طول قابل تکرار و تمام مجوزهای تمام طول ممکن تولید می شود.

توپل های جابجایی طبق ترتیب ورودی قابل تکرار به ترتیب واژگونی ساطع می شوند. بنابراین ، اگر ورودی ورودی طبقه بندی شود ، تاپل های خروجی به ترتیب مرتب شده تولید می شوند.

بر اساس موقعیت آنها ، عناصر بی نظیر رفتار می شوند ، نه بر ارزش آنها. بنابراین اگر عناصر ورودی منحصر به فرد باشند ، هیچ مقدار مکرر در یک جایگرانه وجود نخواهد داشت.

تقریباً معادل:

کد مربوط به مجوزها () را می توان به عنوان پی در پی محصول () بیان کرد ، که فیلتر شده برای حذف ورودی ها با عناصر مکرر (آنهایی که از همان موقعیت در استخر ورودی) هستند:

تعداد موارد برگشتی N است!/ (N-R)! وقتی 0 n.

itertoolsمحصول ( * iterables ، تکرار = 1)

محصول دکارتی از ورودی های ورودی.

تقریباً معادل حلقه های تو در تو در یک بیان ژنراتور. به عنوان مثال ، محصول (A ، B) همان ((x ، y) را برای x در A برای y در b برمی گرداند).

چرخه حلقه های تو در تو مانند یک کیلومتر شمار با راست ترین عنصر که در هر تکرار پیش می رود. این الگوی یک سفارش واژگونی را ایجاد می کند به گونه ای که اگر تکرار ورودی ورودی باشد ، محصول محصول به ترتیب مرتب شده ساطع می شود.

برای محاسبه محصول یک تکرار پذیر با خود ، تعداد تکرارها را با آرگومان کلیدی تکرار اختیاری مشخص کنید. به عنوان مثال ، محصول (A ، تکرار = 4) به معنای همان محصول (A ، A ، A ، A) است.

این عملکرد تقریباً معادل کد زیر است ، به جز این که اجرای واقعی نتایج واسطه ای را در حافظه ایجاد نمی کند:

قبل از اجرای محصول () ، آن را به طور کامل ورودی های ورودی را مصرف می کند و استخرهای مقادیر را در حافظه نگه می دارد تا محصولات را تولید کند. بر این اساس ، فقط با ورودی های محدود مفید است.

itertoolsتکرار (شی [، زمان]))

یک تکرار کننده درست کنید که بارها و بارها شیء را برگرداند. به طور نامحدود اجرا می شود مگر اینکه استدلال زمان مشخص شود.

تقریباً معادل:

استفاده مشترک برای تکرار ، تهیه جریانی از مقادیر ثابت برای نقشه برداری یا زیپ است:

یک تکرار کننده را ایجاد کنید که عملکرد را با استفاده از آرگومان های به دست آمده از تکرار پذیر محاسبه کند. به جای MAP () هنگامی که پارامترهای آرگومان در حال حاضر در Tuples از یک تکرار شده (هنگامی که داده ها "از قبل از پس زمان" شده اند) گروه بندی می شوند.

تفاوت بین نقشه () و starmap () تمایز بین عملکرد (a ، b) و عملکرد (*c) را به همراه دارد. تقریباً معادل:

تا زمانی که محمول درست باشد ، یک تکرار کننده را که عناصر را از تکرار باز می گرداند ، بسازید. تقریباً معادل:

تکرارهای مستقل را از یک تکرار پذیر برگردانید.

کد پایتون زیر به توضیح آنچه TEE انجام می دهد کمک می کند (اگرچه اجرای واقعی پیچیده تر است و فقط از یک صف FIFO اساسی استفاده می کند):

هنگامی که یک Tee () ایجاد شد ، نباید از آن استفاده کرد که در هر جای دیگر قابل استفاده نیست. در غیر این صورت ، قابل تکرار می تواند بدون آگاه بودن اشیاء TEE پیشرفت کند.

تکرارهای Tee Threadsafe نیستند. ممکن است هنگام استفاده از تکرارهای همزمان با همان تماس Tee () ، یک RuntimeRor مطرح شود ، حتی اگر نسخه اصلی آن ThreadSafe باشد.

این itertool ممکن است نیاز به فضای کمکی قابل توجهی داشته باشد (بسته به میزان ذخیره داده های موقتی برای ذخیره سازی). به طور کلی ، اگر یک تکرار کننده قبل از شروع تکرار دیگر از بیشتر یا تمام داده ها استفاده کند ، استفاده از لیست () به جای TEE () سریعتر است.

itertoolszip_longest ( * iterables ، fillValue = none)

یک تکرار کننده ایجاد کنید که عناصر را از هر یک از تکرارها جمع کند. اگر تکرار از طول ناهموار باشد ، مقادیر از دست رفته با FillValue پر می شوند. تکرار تا طولانی ترین تکرار ادامه می یابد. تقریباً معادل:

اگر یکی از موارد تکرار شونده به طور بالقوه بی نهایت باشد ، باید عملکرد zip_longest () با چیزی پیچیده شود که تعداد تماس ها را محدود کند (به عنوان مثال islice () یا takyly ()). اگر مشخص نشده باشد ، پیش فرض های FillValue را به هیچ وجه.

itertools دستور العمل های

در این بخش دستور العمل هایی برای ایجاد یک ابزار گسترده با استفاده از IterTools موجود به عنوان بلوک های ساختمانی نشان داده شده است.

هدف اصلی دستور العمل های IterTools آموزشی است. این دستور العمل ها روشهای مختلفی برای تفکر در مورد ابزارهای فردی نشان می دهد - به عنوان مثال ، آن زنجیره ای. این دستور العمل ها همچنین ایده هایی راجع به روش هایی که می توان ابزارها را با هم ترکیب کرد ، ارائه می دهد - به عنوان مثال ، چگونه فشرده سازی () و دامنه () می توانند با هم کار کنند. این دستور العمل ها همچنین الگوهای استفاده از itertools با ماژول های اپراتور و مجموعه ها و همچنین با IterTools داخلی مانند MAP () ، فیلتر () ، معکوس () و شمارش () را نشان می دهد.

هدف ثانویه دستور العمل ها این است که به عنوان انکوباتور خدمت کنید. itertools جمع آوری () ، کمپرس () و به صورت جفت () به عنوان دستور العمل شروع شد. در حال حاضر ، دستور العمل iter_index () مورد آزمایش قرار می گیرد تا ببیند آیا ارزش آن را اثبات می کند یا خیر.

به طور قابل توجهی همه این دستور العمل ها و بسیاری دیگر ، بسیاری دیگر را می توان از پروژه More-itertools موجود در فهرست بسته های پایتون نصب کرد:

بسیاری از دستور العمل ها عملکرد بالایی را به عنوان ابزار اصلی ارائه می دهند. عملکرد حافظه برتر با پردازش عناصر یک در یک زمان به جای اینکه کل را به یکباره وارد حافظه می کند ، نگه داشته می شود. حجم کد با پیوند دادن ابزارها به سبک کاربردی که به از بین بردن متغیرهای موقت کمک می کند ، کوچک نگه داشته می شود. سرعت بالا با ترجیح بلوک های ساختمانی "بردار" در مورد استفاده از حلقه ها و ژنراتور S که مفسر را در بالای سر می گذارد ، حفظ می شود.

فارکس کاران ایران...
ما را در سایت فارکس کاران ایران دنبال می کنید

برچسب : نویسنده : ديناروند فهيمه بازدید : <-PostHit-> تاريخ : يکشنبه 11 تير 1402 ساعت: 12:50