पायथन में टपल तुलना कैसे काम करती है?


178

मैं कोर पायथन प्रोग्रामिंग किताब पढ़ रहा हूं , और लेखक एक उदाहरण दिखाता है:

(4, 5) < (3, 5) # Equals false

तो, मैं सोच रहा हूँ, कैसे / क्यों यह बराबर झूठ है? अजगर इन दो टुपल्स की तुलना कैसे करता है?

Btw, यह पुस्तक में नहीं समझाया गया है।

जवाबों:


190

टुपल्स की स्थिति की स्थिति से तुलना की जाती है: पहली टुपल के पहले आइटम की तुलना दूसरे टुपल के पहले आइटम से की जाती है; यदि वे समान नहीं हैं (अर्थात पहला दूसरे से बड़ा या छोटा है) तो यह तुलना का परिणाम है, दूसरे आइटम को माना जाता है, फिर तीसरा और इसी तरह।

सामान्य अनुक्रम संचालन देखें :

एक ही प्रकार के अनुक्रम भी तुलना का समर्थन करते हैं। विशेष रूप से, टुपल्स और सूचियों की तुलना शाब्दिक रूप से संबंधित तत्वों की तुलना करके की जाती है। इसका अर्थ है कि समान की तुलना करने के लिए, प्रत्येक तत्व की तुलना बराबर होनी चाहिए और दो क्रम एक ही प्रकार के होने चाहिए और उनकी लंबाई समान होनी चाहिए।

इसके अलावा आगे के विवरण के लिए मूल्य तुलना :

अंतर्निहित संग्रह के बीच की लक्सोग्राफिक तुलना इस प्रकार है:

  • समान की तुलना करने के लिए दो संग्रहों के लिए, उन्हें एक ही प्रकार का होना चाहिए, समान लंबाई होनी चाहिए, और संबंधित तत्वों की प्रत्येक जोड़ी की तुलना बराबर होनी चाहिए (उदाहरण के लिए, [1,2] == (1,2)यह गलत है क्योंकि प्रकार समान नहीं है)।
  • आदेश की तुलना का समर्थन करने वाले संग्रह को उनके पहले असमान तत्वों (उदाहरण के लिए, [1,2,x] <= [1,2,y]के समान मूल्य x <= y) के समान आदेश दिया जाता है । यदि कोई संगत तत्व मौजूद नहीं है, तो छोटे संग्रह को पहले ऑर्डर किया जाता है (उदाहरण के लिए, [1,2] < [1,2,3]सच है)।

यदि समान नहीं है, तो अनुक्रमों को उनके पहले भिन्न तत्वों के समान आदेश दिया जाता है। उदाहरण के लिए, cmp ([1,2, x], [1,2, y]) cmp (x, y) के समान है। यदि संबंधित तत्व मौजूद नहीं है, तो छोटे अनुक्रम को छोटा माना जाता है (उदाहरण के लिए, [1,2] <[1,2,3] सत्य है)।

नोट 1 : <और >इसका अर्थ "" से छोटा "और" से बड़ा नहीं "है, लेकिन" से पहले है "और" के बाद है: "(0, 1)" से पहले है (1, 0)।

नोट 2 : ट्यूपल्स को एन-डायमेंशनल स्पेस में वैक्टर के रूप में नहीं माना जाना चाहिए , उनकी लंबाई के अनुसार।

नोट 3 : सवाल का जिक्र करते हुए /programming/36911617/python-2-tuple-comparison : यह मत सोचो कि एक ट्यूपल केवल दूसरे की तुलना में "अधिक" है यदि पहले का कोई तत्व संगत से अधिक हो। दूसरे में एक।


4
इस बारे में बात करते समय भ्रामक हो सकता है <और >। उदाहरण के लिए, का (0, 1) < (1, 0)मूल्यांकन करता है True
कोई भी

4
@CMCDragonkai - हाँ। कोशिश करें: x = tuple([0 for _ in range(n)])और y के लिए भी ऐसा ही करें। N = 100, 1000, 10,000, और 100,000 सेट करना और रनिंग %timeit x==yने क्रमशः .5, 4.6, 43.9 और 443 माइक्रोसेकंड के समय मान दिए, जो कि लगभग ओ (एन) के रूप में है जैसा कि आप व्यावहारिक रूप से प्राप्त कर सकते हैं।
माइकल स्कॉट कथबर्ट ने

8
@ J.Money आपको क्यों लगता है कि यह भ्रामक हो सकता है?
डॉन

1
@CharlieParker <और >"छोटे तब" और "बड़े तब" का मतलब नहीं है, लेकिन "पहले आता है" और "बाद में आता है": तो (0, 1)"पहले आता है"(1, 0)
डॉन

3
@ मुझे लगता है कि यह स्पष्ट नहीं है कि हम किस प्रकार के आदेश को एक टुल्ल पर लगाने के लिए कहते हैं। मुझे लगता है कि अजगर केवल सबसे बड़े महत्वपूर्ण अंक की जाँच करके और मरने के लिए आगे बढ़ने से संख्याओं के रूप में व्यवहार करता है ... (एक तत्व बुद्धिमान फैशन में)
चार्ली पार्कर

20

अजगर प्रलेखन समझा है।

Tuples और सूचियों की तुलना इसी तत्वों के तुलनात्मक रूप से की जाती है। इसका अर्थ है कि समान की तुलना करने के लिए, प्रत्येक तत्व की तुलना बराबर होनी चाहिए और दो अनुक्रम एक ही प्रकार के होने चाहिए और उनकी लंबाई समान होनी चाहिए।


अब इस उत्तर से जुड़े पृष्ठ में पाठ का हवाला नहीं दिया गया है।
प्लगवॉश करें

0

अजगर 2.5 प्रलेखन यह अच्छी तरह से बताते हैं।

Tuples और सूचियों की तुलना इसी तत्वों के तुलनात्मक रूप से की जाती है। इसका अर्थ है कि समान की तुलना करने के लिए, प्रत्येक तत्व की तुलना बराबर होनी चाहिए और दो अनुक्रम एक ही प्रकार के होने चाहिए और उनकी लंबाई समान होनी चाहिए।

यदि समान नहीं है, तो अनुक्रमों को उनके पहले भिन्न तत्वों के समान आदेश दिया जाता है। उदाहरण के लिए, cmp ([1,2, x], [1,2, y]) cmp (x, y) के समान है। यदि संबंधित तत्व मौजूद नहीं है, तो छोटे अनुक्रम को पहले आदेश दिया जाता है (उदाहरण के लिए, [1,2] <[1,2,3])।

दुर्भाग्य से वह पृष्ठ हाल के संस्करणों के लिए प्रलेखन में गायब हो गया है।


0
पूर्णांक समपर्क के बारे में मुझे पहले कुछ भ्रम था, इसलिए मैं इसे एक उदाहरण के साथ और अधिक अनुकूल होने के लिए समझाऊंगा

a = ('A','B','C') # see it as the string "ABC" b = ('A','B','D')

A को ord('A') #65अन्य तत्वों के लिए इसी ASCII में परिवर्तित किया जाता है

तो, >> a>b # True आप इसे स्ट्रिंग के बीच तुलना के रूप में सोच सकते हैं (यह वास्तव में है, वास्तव में)

यही बात पूर्णांक के लिए भी जाती है।

x = (1,2,2) # see it the string "123" y = (1,2,3) x > y # False

क्योंकि (1 से अधिक नहीं है, अगले करने के लिए ले जाएँ, 2 2 से अधिक नहीं है, अगले 2 के लिए कदम तीन से कम है - -योगात्मक रूप से)

उपरोक्त उत्तर में मुख्य बिंदु का उल्लेख किया गया है

एक तत्व के रूप में इसके बारे में सोचो एक और वर्णानुक्रम से पहले एक तत्व तत्व से अधिक नहीं है और इस मामले में सभी टपल तत्वों को एक स्ट्रिंग पर विचार करें।


2
(1,2,3) > (1,2,2)देता हैTrue
विशाल सिंह
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.