मान लीजिए कि मेरे पास सेट की एक सूची है और मैं उस सूची में सभी सेटों पर संघ प्राप्त करना चाहता हूं। जनरेटर अभिव्यक्ति का उपयोग करके ऐसा करने का कोई तरीका है? दूसरे शब्दों में, मैं उस सूची में सीधेfrozenset
के रूप में सभी सेटों पर संघ कैसे बना सकता हूं?जनरेटर अभिव्यक्ति का उपयोग करके कई सेटों का संघ कैसे बनाएं?
उत्तर
बस the .union()
method का उपयोग करें।
>>> l = [set([1,2,3]), set([4,5,6]), set([1,4,9])]
>>> frozenset().union(*l)
frozenset([1, 2, 3, 4, 5, 6, 9])
यह पुनरावृत्तियों के किसी भी पुनरावर्तनीय के लिए काम करता है।
बस ध्यान दें कि 'frozenset.union' को एक अनबाउंड विधि के रूप में उपयोग करने के लिए क्लीनर है, यदि 'l' में' frozenset's eg 'Frozenset.union (* एल)'। 'Set.union' के लिए वही। – vaultah
नेस्टेड जेनरेटर अभिव्यक्ति। लेकिन मुझे लगता है कि वे थोड़ा सा गूढ़ हैं, इसलिए जिस तरह से केनीटीएम सुझाव दिया गया वह स्पष्ट हो सकता है।
frozenset(some_item for some_set in some_sets for some_item in some_set)
चतुरता के लिए +1 – aaronasterling
यह वास्तव में स्पष्ट है, लेकिन केनी के समाधान से लगभग 4 गुना धीमी है – fransua
मुझे लगता है कि क्या आप से बचने के लिए कोशिश कर रहे हैं frozenset वस्तुओं के मध्यवर्ती कृतियों आप संघ का निर्माण कर रहे हैं के रूप में है?
इसे करने का एक तरीका यहां है। नोट: इस मूल itertools.chain()
थे, लेकिन केनी की टिप्पणी नोटों के रूप में, नीचे दिए गए संस्करण थोड़ा बेहतर है:
import itertools
def mkunion(*args):
return frozenset(itertools.chain.from_iterable(args))
आह्वान इस तरह:
a = set(['a','b','c'])
b = set(['a','e','f'])
c = mkunion(a,b) # => frozenset(['a', 'c', 'b', 'e', 'f'])
यदि आप '.chain (* args) 'पर जा रहे हैं तो' chain.from_iterable' 'का उपयोग करें। – kennytm
@ केनीटीएम: अच्छा बिंदु, मैंने बदलाव किया है। –
मेरे प्रदर्शन परीक्षण परिणाम (पायथन 3 के साथ): सेट्स की संख्या <10000 की संख्या के साथ केनीटीएम की प्रतिक्रिया थोड़ा तेज़ है, लेकिन यह प्रतिक्रिया 30000 सेट के साथ थोड़ा तेज है –
भी देखें: http://stackoverflow.com/ ए/5182801/1 9 5 9 808 –