कोर्स
Python सूचियों (lists) की तरह, tuples भी एक मानक डेटा प्रकार हैं जो आपको मानों को अनुक्रम में संग्रहीत करने देते हैं। ये उन स्थितियों में उपयोगी हो सकते हैं जहाँ आप डेटा किसी के साथ साझा करना चाहते हैं, लेकिन उन्हें डेटा में बदलाव करने की अनुमति नहीं देना चाहते। वे डेटा मानों का उपयोग कर सकते हैं, पर मूल साझा किए गए डेटा में कोई परिवर्तन परिलक्षित नहीं होगा।
इस ट्यूटोरियल में, आप Python tuples को विस्तार से देखेंगे:
- आप सीखेंगे कि tuples को कैसे initialize करें। आप उदाहरणों के माध्यम से tuples की अपरिवर्तनीय (immutable) प्रकृति भी देखेंगे;
- आप यह भी जानेंगे कि tuple Python list से कैसे अलग है;
- फिर, आप विभिन्न tuple operations देखेंगे, जैसे slicing, multiplying, concatenating, आदि;
- tuples के साथ कुछ built-in फ़ंक्शंस जानना उपयोगी है और आप इस खंड में कुछ महत्वपूर्ण फ़ंक्शंस देखेंगे।
- अंत में, आप देखेंगे कि tuples को एक साथ एकाधिक मान देना भी संभव है।

DataCamp के Data Types for Data Science कोर्स को ज़रूर देखें, जहाँ आप lists, dictionaries, sets, और कई अन्य डेटा संरचनाओं के अपने ज्ञान को मज़बूत कर सकते हैं और अभ्यास कर सकते हैं! वैकल्पिक रूप से, यह Python Data Structures Tutorial भी देखें, जिसमें आप Python में उपयोग होने वाली अलग-अलग डेटा संरचनाओं के बारे में अधिक जान सकते हैं।
Python Tuple
जैसा कि आपने ऊपर पढ़ा, आप इस Python डेटा संरचना का उपयोग उन आइटम्स के अनुक्रम को संग्रहीत करने के लिए कर सकते हैं जो अपरिवर्तनीय (या बदले न जा सकने वाले) और क्रमबद्ध होते हैं।
Tuples को lists की तरह [] की बजाय () ब्रैकेट्स से initialize किया जाता है। यानी, एक tuple बनाने के लिए, आपको बस यह करना है:
cake = ('c','a','k','e')
print(type(cake))
<class 'tuple'>
याद रखें कि type() एक built-in फ़ंक्शन है जो आपको दिए गए पैरामीटर का डेटा प्रकार जाँचने देता है।
Tuples समरूप (homogeneous) और विषम (heterogeneous), दोनों प्रकार के मान रख सकते हैं। हालाँकि, याद रखें कि एक बार ये मान घोषित कर दिए, तो आप उन्हें बदल नहीं सकते:
mixed_type = ('C',0,0,'K','I','E')
for i in mixed_type:
print(i,":",type(i))
C : <class 'str'>
0 : <class 'int'>
0 : <class 'int'>
K : <class 'str'>
I : <class 'str'>
E : <class 'str'>
# 0 को 'O' में बदलने की कोशिश करें
mixed_type[1] = 'O'
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-16-dec29c289a95> in <module>()
----> 1 mixed_type[1] = 'O' # Trying to change 0 to 'O'
TypeError: 'tuple' object does not support item assignment
आपको यह अंतिम त्रुटि इसलिए मिलती है क्योंकि आप tuple के भीतर के मान नहीं बदल सकते।
Tuple बनाने का एक और तरीका यह है:
numbers_tuple = 1,2,3,4,5
print(type(numbers_tuple))
<class 'tuple'>Tuples बनाम Lists
जैसा कि आपने देखा होगा, tuples सूचियों के बहुत समान हैं। वास्तव में, आप कह सकते हैं कि वे अपरिवर्तनीय सूचियाँ हैं, जिसका मतलब है कि एक बार tuple बन जाने पर आप उसमें संग्रहीत आइटम्स के मानों को न तो हटा सकते हैं और न ही बदल सकते हैं। आप नए मान भी नहीं जोड़ सकते। यह देखें:
numbers_tuple = (1,2,3,4,5)
numbers_list = [1,2,3,4,5]
# tuple में एक संख्या जोड़ें
numbers_tuple.append(6)
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-26-e47776d745ce> in <module>()
3
4 # Append a number to the tuple
----> 5 numbers_tuple.append(6)
AttributeError: 'tuple' object has no attribute 'append'
यह त्रुटि इसलिए आती है क्योंकि आप tuple से न तो हटाने और न ही जोड़ने का काम कर सकते हैं, जबकि सूची (list) में यह संभव है।
# सूची में संख्याएँ जोड़ें
numbers_list.append(6)
numbers_list.append(7)
numbers_list.append(8)
# सूची से एक संख्या हटाएँ
numbers_list.remove(7)
print(numbers_list)
[1, 2, 3, 4, 5, 6, 8]
लेकिन जब tuples अपरिवर्तनीय हैं, तो आप उनका उपयोग क्यों करेंगे?
क्योंकि वे डेटा मानों के लिए "केवल-पढ़ने" (read-only) की सुविधा देने के साथ-साथ सूचियों से तेज भी होते हैं। निम्नलिखित कोड देखें:
import timeit
timeit.timeit('x=(1,2,3,4,5,6,7,8,9)', number=100000)
0.0018976779974764213
timeit.timeit('x=[1,2,3,4,5,6,7,8,9]', number=100000)
0.019868606992531568
Tuples के संदर्भ में immutable का वास्तविक अर्थ क्या है?
आधिकारिक Python प्रलेखन के अनुसार, immutable वह ऑब्जेक्ट है जिसका मान स्थिर होता है, लेकिन 'value' एक कुछ अस्पष्ट शब्द है; tuples के लिए अधिक सटीक शब्द 'id' होगा। 'id' मेमोरी में किसी ऑब्जेक्ट के लोकेशन की पहचान है।
आइए इसे थोड़ा और गहराई से देखें:
# Tuple 'n_tuple' जिसमें एक list भी एक आइटम के रूप में है।
n_tuple = (1, 1, [3,4])
# समान मान वाले आइटम्स का id समान होता है।
id(n_tuple[0]) == id(n_tuple[1])
True
# भिन्न मान वाले आइटम्स का id अलग होता है।
id(n_tuple[0]) == id(n_tuple[2])
False
id(n_tuple[0])
4297148528
id(n_tuple[2])
4359711048
n_tuple.append(5)
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-40-3cd258e024ff> in <module>()
----> 1 n_tuple.append(5)
AttributeError: 'tuple' object has no attribute 'append'
हम किसी tuple में आइटम नहीं जोड़ सकते, इसलिए आपको ऊपर त्रुटि मिली। यही कारण है कि tuple को immutable कहा जाता है। लेकिन, आप यह कर सकते हैं:
n_tuple[2].append(5)
n_tuple
(1, 1, [3, 4, 5])
इस प्रकार, आप वास्तव में मूल tuple में परिवर्तन कर लेते हैं। फिर भी tuple को immutable कैसे कहा जाता है?
क्योंकि, tuple के भीतर मौजूद list का id 5 जोड़ने के बाद भी वही रहता है।
id(n_tuple[2])
4359711048
अब तक आपने जो सीखा, उसका सारांश:
कुछ tuples (जो केवल अपरिवर्तनीय वस्तुएँ रखते हैं: जैसे strings, आदि) वास्तव में अपरिवर्तनीय होते हैं और कुछ अन्य tuples (जो एक या अधिक परिवर्तनशील वस्तुएँ रखते हैं: जैसे lists, आदि) परिवर्तनशील हो सकते हैं। हालाँकि, यह Python समुदाय में अक्सर बहस का विषय रहा है और इसे पूरी तरह समझने के लिए आपको और पृष्ठभूमि ज्ञान चाहिए। इसी विषय पर एक अधिक गहन लेख यहाँ है। फिलहाल, मान लें कि सामान्यतः tuples को immutable माना जाता है।
- आप tuples में तत्व नहीं जोड़ सकते क्योंकि वे immutable हैं। Tuples के लिए
append()याextend()जैसे मेथड नहीं होते, - आप tuples से तत्व नहीं हटा सकते, यह भी उनकी immutability के कारण है। Tuples में
remove()याpop()मेथड नहीं होते, - आप tuples में तत्व खोज सकते हैं क्योंकि इससे tuple नहीं बदलता।
- आप किसी तत्व के tuple में होने की जाँच के लिए
inऑपरेटर का उपयोग भी कर सकते हैं।
अतः, यदि आप मानों का एक स्थिर सेट परिभाषित कर रहे हैं और आपको केवल उस पर iterate करना है, तो सूची के बजाय tuple का उपयोग करें। यह सूचियों की तुलना में तेज़ और अधिक सुरक्षित होगा, क्योंकि tuples में डेटा "write-protect" रहता है।
यदि आप Python lists के बारे में और जानना चाहते हैं, तो यह ट्यूटोरियल ज़रूर देखें!
सामान्य Tuple Operations
Python आपको tuples को संसाधित (manipulate) करने के कई तरीके देता है। आइए कुछ महत्वपूर्ण तरीकों को उदाहरणों के साथ देखें।
Tuple Slicing
Tuple में पहला मान इंडेक्स 0 पर होता है। ठीक Python lists की तरह, आप वर्ग कोष्ठक [] के साथ इंडेक्स मानों का उपयोग करके tuple के आइटम्स तक पहुँच सकते हैं:
numbers = (0,1,2,3,4,5)
numbers[0]
0
आप tuples के साथ नकारात्मक इंडेक्सिंग भी कर सकते हैं:
numbers[-1]
5
जहाँ indexing का उपयोग एक-एक आइटम प्राप्त करने के लिए होता है, वहीं slicing आपको आइटम्स का उप-समुच्चय प्राप्त करने देती है। जब आप निकालने के लिए एक रेंज देते हैं, तो उसे range slicing कहते हैं। range slicing का सामान्य प्रारूप है:
[Start index (included):Stop index (excluded):Increment]
यहाँ Increment एक वैकल्पिक पैरामीटर है, और डिफ़ॉल्ट रूप से increment 1 होता है।
# इंडेक्स 4 का आइटम शामिल नहीं होगा
numbers[1:4]
(1, 2, 3)
# यह tuple के सभी आइटम्स देता है
numbers[:]
(0, 1, 2, 3, 4, 5)
# Increment = 2
numbers[::2]
(0, 2, 4)
टिप: आप tuple को उल्टा करने के लिए नकारात्मक increment मान का उपयोग भी कर सकते हैं।
numbers[::-1]
(5, 4, 3, 2, 1, 0)
Tuple Addition
आप tuples को मिलाकर एक नया tuple बना सकते हैं। addition ऑपरेशन tuples के साथ सरल concatenation करता है।
x = (1,2,3,4)
y = (5,6,7,8)
# दो tuples को मिलाकर नया tuple बनाना
z = x + y
print(z)
(1, 2, 3, 4, 5, 6, 7, 8)
y = [5,6,7,8]
z = x + y
print(z)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-55-d352c6414a4c> in <module>()
1 y = [5,6,7,8]
----> 2 z = x + y
3 print(z)
TypeError: can only concatenate tuple (not "list") to tuple
आप केवल समान डेटा प्रकार जोड़ या मिला सकते हैं। इसलिए tuple और list को मिलाने पर त्रुटि मिलती है।
Tuple Multiplication
Multiplication ऑपरेशन tuple के पुनरावृत्ति (repetition) का कारण बनता है।
x = (1,2,3,4)
z = x*2
print(z)
(1, 2, 3, 4, 1, 2, 3, 4)
Tuple Functions
Python lists के विपरीत, tuples में उनकी अपरिवर्तनीय प्रकृति के कारण append(), remove(), extend(), insert() और pop() जैसे मेथड नहीं होते। हालाँकि, tuples के साथ काम करने के लिए कई अन्य built-in मेथड उपलब्ध हैं:
count() और len()
count() tuple में किसी आइटम के होने की संख्या लौटाता है।
a = [1,2,3,4,5,5]
a.count(5)
2
len() फ़ंक्शन से आप tuple की लंबाई प्राप्त कर सकते हैं:
a = (1,2,3,4,5)
print(len(a))
5
any()
आप any() का उपयोग यह जानने के लिए कर सकते हैं कि किसी tuple का कोई तत्व truthy है या नहीं। यदि ऐसा है तो आपको True मिलेगा, अन्यथा False लौटेगा।
a = (1,)
print(any(a))
True
ऊपर tuple a की घोषणा में , पर ध्यान दें। यदि आप tuple में एक ही आइटम initialize करते समय कॉमा नहीं लगाते, तो Python मानता है कि आपने गलती से एक अतिरिक्त ब्रैकेट जोड़ दिया है (जो हानिरहित है) लेकिन फिर डेटा प्रकार tuple नहीं होता। इसलिए एकल आइटम वाले tuple की घोषणा करते समय कॉमा लगाना याद रखें।
अब any() फ़ंक्शन पर वापस आते हैं: बूलियन संदर्भ में, आइटम के मान का प्रकार मायने नहीं रखता। खाली tuple false होता है, और कम से कम एक आइटम वाला कोई भी tuple true होता है।
b = ()
print(any(b))
False
यह फ़ंक्शन तब उपयोगी हो सकता है जब आप अपने प्रोग्राम में कहीं tuple को कॉल कर रहे हों और यह सुनिश्चित करना चाहते हों कि tuple भरा हुआ है।
tuple()
tuple() का उपयोग किसी डेटा प्रकार को tuple में बदलने के लिए करें। उदाहरण के लिए, नीचे दिए गए कोड में आप एक Python list को tuple में बदलते हैं।
a_list = [1,2,3,4,5]
b_tuple = tuple(a_list)
print(type(b_tuple))
<class 'tuple'>
min() और max()
max() tuple में सबसे बड़ा तत्व लौटाता है, जबकि min() सबसे छोटा तत्व लौटाता है। उदाहरण देखें:
print(max(a))
print(min(a))
5
A
आप इसे string डेटा प्रकार वाले tuples के साथ भी उपयोग कर सकते हैं।
# 'Apple' स्ट्रिंग अपने आप अक्षरों के अनुक्रम में बदल जाती है।
a = ('Apple')
print(max(a))
p
sum()
इस फ़ंक्शन से आप tuple में मौजूद आइटम्स का कुल योग लौटाते हैं। यह केवल संख्यात्मक मानों के साथ उपयोग किया जा सकता है।
sum(a)
28
sorted()
तत्वों को क्रमबद्ध क्रम में लौटाने के लिए sorted() का उपयोग करें, जैसा कि नीचे के उदाहरण में है:
a = (6,7,4,2,1,5,3)
sorted(a)
[1, 2, 3, 4, 5, 6, 7]
ध्यान देने योग्य बात यह है कि return type list होता है, tuple नहीं। मूल tuple 'a' का अनुक्रम नहीं बदलता और 'a' का डेटा प्रकार tuple ही रहता है।
बोनस: एकाधिक मान असाइन करना
Tuples के साथ एक दिलचस्प चीज़ यह है कि आप उनका उपयोग एक साथ कई मान असाइन करने के लिए कर सकते हैं। यह देखें:
a = (1,2,3)
(one,two,three) = a
print(one)
1
a तीन तत्वों का tuple है और (one,two,three) तीन चर (variables) का tuple है। (one,two,three) को a tuple के बराबर असाइन करने पर, a के प्रत्येक मान क्रम से one, two और three चर को असाइन हो जाते हैं। यह तब उपयोगी होता है जब आपको tuple में संग्रहीत किसी अनुक्रम के मानों की एक श्रृंखला चर को देनी हो।
बधाई!
आप इस tuple ट्यूटोरियल के अंत तक पहुँच गए हैं! इस यात्रा में, आपने सीखा कि Python tuples क्या हैं, उन्हें कैसे initialize किया जा सकता है, उन्हें संसाधित करने के लिए आप किन सामान्य operations का उपयोग कर सकते हैं, और किन सामान्य मेथड्स से आप इन Python डेटा संरचनाओं से अधिक अंतर्दृष्टि प्राप्त कर सकते हैं। बोनस के तौर पर, आपने यह भी सीखा कि आप tuples को एक साथ कई मान असाइन कर सकते हैं।