अजगर में इसके अलावा ऑपरेटर कोनकैटेनेट्स tuples:
('a', 'b')+('c', 'd')
Out[34]: ('a', 'b', 'c', 'd')
sum
की docstring से:
वापसी एक 'स्टार्ट' मान का योग (डिफ़ॉल्ट: 0) के साथ साथ का एक iterable संख्या
इसका मतलब है sum
आपके पुनरावर्तनीय के पहले तत्व से शुरू नहीं होता है, लेकिन बल्कि start=
तर्क के माध्यम से पारित प्रारंभिक मान के साथ।
डिफ़ॉल्ट रूप से sum
संख्यात्मक के साथ प्रयोग किया जाता है इस प्रकार डिफ़ॉल्ट प्रारंभ मान 0
है। तो tuples के एक पुनरावर्तनीय संक्षेप में एक खाली tuple के साथ शुरू करने की आवश्यकता है। ()
एक खाली ट्यूपल है:
type(())
Out[36]: tuple
इसलिए कामकाजी संगतता।
%timeit sum(tuples,())
The slowest run took 9.40 times longer than the fastest. This could mean that an intermediate result is being cached.
1000000 loops, best of 3: 285 ns per loop
%timeit tuple(it.chain.from_iterable(tuples))
The slowest run took 5.00 times longer than the fastest. This could mean that an intermediate result is being cached.
1000000 loops, best of 3: 625 ns per loop
एक आकार 10000 के t2 साथ
अब:
%timeit sum(t2,())
10 loops, best of 3: 188 ms per loop
%timeit tuple(it.chain.from_iterable(t2))
1000 loops, best of 3: 526 µs per loop
तो अगर tuples की अपनी सूची छोटा है, आपको परेशान नहीं है
प्रति प्रदर्शन के रूप में, यहाँ एक तुलना है। यदि यह मध्यम आकार या बड़ा है, तो आपको itertools
का उपयोग करना चाहिए।
यह कार्य क्यों नहीं करना चाहिए? यह सिर्फ एक साथ tuples जोड़ रहा है, लेकिन यह विशेष रूप से कुशल नहीं है। [Itertools.chain] पर एक नज़र डालें (https://docs.python.org/3/library/itertools.html#itertools.chain)। उदाहरण के लिए, 'tuple (श्रृंखला (* tuples)) ' –
@ पीएम 2Ring। 'चेन' का उपयोग करने से बचें क्योंकि यह' sum' से भी अधिक अक्षम है (जब तक कि टुपल्स का संग्रह बहुत छोटा न हो)। इसके बजाए 'chain.from_iterable' का प्रयोग करें। – ekhumoro
@ekhumoro ओह! हां, chain.from_iterable बेहतर है। और जैसा कि बोउड के जवाब से पता चलता है, यह वास्तव में tuples के छोटे संग्रह के लिए राशि से धीमा है। –