*
"स्पैट" ऑपरेटर है: यह एक सूची को इनपुट के रूप में लेता है, और इसे फ़ंक्शन कॉल में वास्तविक स्थिति संबंधी तर्कों में विस्तारित करता है।
तो अगर uniqueCrossTabs
था [ [ 1, 2 ], [ 3, 4 ] ]
, तो itertools.chain(*uniqueCrossTabs)
जैसा कह रहा है वैसा ही हैitertools.chain([ 1, 2 ], [ 3, 4 ])
यह स्पष्ट रूप से सिर्फ पास होने से अलग है uniqueCrossTabs
। आपके मामले में, आपके पास उन सूचियों की एक सूची है जिन्हें आप समतल करना चाहते हैं; itertools.chain()
आपके द्वारा पास किए जाने वाले सभी स्थितीय तर्कों के संघटन पर एक पुनरावर्तक को क्या लौटाता है, जहाँ प्रत्येक स्थितीय तर्क अपने आप में पुनरावृत्त होता है।
दूसरे शब्दों में, आप प्रत्येक सूची uniqueCrossTabs
को एक तर्क के रूप में पास करना चाहते हैं chain()
, जो उन्हें एक साथ श्रृंखला देगा, लेकिन आपके पास अलग-अलग चर में सूचियां नहीं हैं, इसलिए आप *
सूची की सूची को कई सूची तर्क में विस्तारित करने के लिए ऑपरेटर का उपयोग करते हैं ।
जैसा कि जोचेन रिट्जेल ने टिप्पणियों में बताया है, chain.from_iterable()
इस ऑपरेशन के लिए बेहतर अनुकूल है, क्योंकि यह शुरू करने के लिए पुनरावृत्तियों के एकल चलने योग्य मानता है। आपका कोड तो बस हो जाता है:
uniqueCrossTabs = list(itertools.chain.from_iterable(uniqueCrossTabs))