यह एक चतुर बिट है।
सबसे पहले, जैसा कि एक टिप्पणी में उल्लेख किया गया है, पायथन 3 में zip()
एक पुनरावृत्त रिटर्न देता है, इसलिए आपको list()
एक वास्तविक सूची वापस पाने के लिए पूरी चीज़ को संलग्न करने की आवश्यकता है , इसलिए 2020 तक यह वास्तव में है:
list(zip(*original[::-1]))
यहाँ ब्रेकडाउन है:
[::-1]
- उल्टे क्रम में मूल सूची की उथली प्रति बनाता है। यह भी उपयोग कर सकता है reversed()
जो वास्तव में सूची (अधिक मेमोरी कुशल) की नकल करने के बजाय सूची पर एक रिवर्स पुनरावृत्ति उत्पन्न करेगा।
*
- प्रत्येक सूची को मूल सूची में एक अलग तर्क देता है zip()
(यानी, सूची को हटाता है)
zip()
- प्रत्येक तर्क से एक आइटम लेता है और उन लोगों से एक सूची (अच्छी तरह से, एक टुपल) बनाता है और तब तक दोहराता है जब तक कि सभी उपनलिस्ट समाप्त नहीं हो जाते हैं। यह वह जगह है जहाँ वाष्पोत्सर्जन वास्तव में होता है।
list()
zip()
एक सूची के उत्पादन धर्मान्तरित ।
तो यह मानते हुए कि आपके पास यह है:
[ [1, 2, 3],
[4, 5, 6],
[7, 8, 9] ]
आप पहले इसे प्राप्त करें (उथले, उलट प्रति):
[ [7, 8, 9],
[4, 5, 6],
[1, 2, 3] ]
अगले प्रत्येक उपविजेता को एक तर्क के रूप में पारित किया जाता है zip
:
zip([7, 8, 9], [4, 5, 6], [1, 2, 3])
zip()
बार-बार अपने प्रत्येक तर्क की शुरुआत से एक आइटम का उपभोग करता है और इससे एक नल बनाता है, जब तक कि अधिक आइटम न हों, जिसके परिणामस्वरूप (सूची में परिवर्तित होने के बाद):
[(7, 4, 1),
(8, 5, 2),
(9, 6, 3)]
और बॉब आपके चाचा हैं।
दूसरी दिशा में इसे घुमाने के बारे में एक टिप्पणी में @ IkeMiguel के प्रश्न का उत्तर देने के लिए, यह बहुत सीधा है: आपको बस उन दोनों दृश्यों को उलटने की आवश्यकता है zip
जो परिणाम और परिणाम में जाते हैं। पहली को हटाकर हासिल किया जा सकता है [::-1]
और दूसरे reversed()
को पूरी चीज को फेंक कर हासिल किया जा सकता है। के बाद से reversed()
रिटर्न सूची पर पुनरावर्तक, हम डाल करने की आवश्यकता होगी list()
के आसपास है कि यह कन्वर्ट करने के लिए। कुछ अतिरिक्त list()
कॉल के साथ पुनरावृत्तियों को एक वास्तविक सूची में बदलने के लिए। इसलिए:
rotated = list(reversed(list(zip(*original))))
हम इसके बजाय "मार्टियन स्माइली" स्लाइस का उपयोग करके इसे थोड़ा सरल कर सकते हैं reversed()
... फिर हमें बाहरी की आवश्यकता नहीं है list()
:
rotated = list(zip(*original))[::-1]
बेशक, आप केवल तीन बार सूची को दक्षिणावर्त घुमा सकते हैं। :-)