पाइथन में ट्यूपल में कन्वर्ट सूची


544

मैं एक सूची को एक टुपल में बदलने की कोशिश कर रहा हूं।

Google पर अधिकांश समाधान निम्नलिखित कोड प्रदान करते हैं:

l = [4,5,6]
tuple(l)

हालाँकि, जब मैं इसे चलाता हूं तो कोड एक त्रुटि संदेश देता है:

TypeError: 'tuple' ऑब्जेक्ट कॉल करने योग्य नहीं है मैं इस समस्या को कैसे ठीक कर सकता हूँ?


78
क्या आपने tupleपहले चर नाम कहीं और दिया था?
यूमरियो

18
अत्यधिक नमकीन नहीं होना चाहिए, लेकिन आप शायद कम मामले "एल" का उपयोग एक चर नाम के रूप में इसके समानता के कारण नहीं कर सकते हैं। 1. शून्य के समान समानता के कारण पूंजी "ओह" के लिए जाता है। यहां तक ​​कि "ली" तुलना में बहुत अधिक पठनीय है।
अल्बर्ट रोथमैन

जवाबों:


815

यह ठीक काम करना चाहिए। एक चर नाम के रूप में tuple, listया अन्य विशेष नामों का उपयोग न करें । शायद यह आपकी समस्या का कारण है।

>>> l = [4,5,6]
>>> tuple(l)
(4, 5, 6)

109

यूमिरो की टिप्पणी पर विस्तार करते हुए, सामान्य रूप tuple(l)से एक सूची lको टुप में परिवर्तित किया जाएगा :

In [1]: l = [4,5,6]

In [2]: tuple
Out[2]: <type 'tuple'>

In [3]: tuple(l)
Out[3]: (4, 5, 6)

हालांकि, अगर आपने इसके tupleबजाय एक ट्यूल होने के लिए पुनर्परिभाषित किया है type tuple:

In [4]: tuple = tuple(l)

In [5]: tuple
Out[5]: (4, 5, 6)

तब आपको एक टाइपError मिलती है क्योंकि टूपल खुद कॉल करने योग्य नहीं है:

In [6]: tuple(l)
TypeError: 'tuple' object is not callable

आप tupleअपने दुभाषिया को छोड़ने और पुनः आरंभ करने के लिए मूल परिभाषा को पुनर्प्राप्त कर सकते हैं , (@glglgl के लिए धन्यवाद):

In [6]: del tuple

In [7]: tuple
Out[7]: <type 'tuple'>

29

आपने ऐसा कुछ किया होगा:

>>> tuple = 45, 34  # You used `tuple` as a variable here
>>> tuple
(45, 34)
>>> l = [4, 5, 6]
>>> tuple(l)   # Will try to invoke the variable `tuple` rather than tuple type.

Traceback (most recent call last):
  File "<pyshell#10>", line 1, in <module>
    tuple(l)
TypeError: 'tuple' object is not callable
>>>
>>> del tuple  # You can delete the object tuple created earlier to make it work
>>> tuple(l)
(4, 5, 6)

यहाँ समस्या है ... चूंकि आपने पहले एक tupleचर का उपयोग किया है tuple (45, 34)... इसलिए, अब tupleएक objectप्रकार का tupleहै ...

यह और नहीं है typeऔर इसलिए, यह अब और नहीं है Callable

Neverकिसी भी निर्मित प्रकार का उपयोग अपने चर नाम के रूप में करें ... आपके पास उपयोग करने के लिए कोई अन्य नाम है। इसके बजाय अपने चर के लिए किसी भी मनमाने नाम का उपयोग करें ...


25

tuple(l)पायथन के रूप में एक और विकल्प जोड़ने के लिए > = 3.5आप कर सकते हैं:

t = *l,  # or t = (*l,) 

संक्षेप में, थोड़ा तेज लेकिन शायद पठनीयता से ग्रस्त है।

यह अनिवार्य रूप से lएक टुपल शाब्दिक के अंदर सूची को अनपैक करता है जो एकल कॉमा की उपस्थिति के कारण बनता है ,


Ps: आपको जो त्रुटि मिल रही है, वह नाम के मास्किंग के कारण है, tupleजैसे कि आपने नाम tuple को सौंपा है tuple = (1, 2, 3)

del tupleआप का उपयोग करना अच्छा होना चाहिए।


4

मुझे आज तक कई जवाब मिले और ठीक से जवाब दिया गया लेकिन जवाबों के ढेर में कुछ नया जोड़ देगा।

अजगर में ऐसा करने के अनंत तरीके हैं, यहाँ कुछ उदाहरण
सामान्य तरीके हैं

>>> l= [1,2,"stackoverflow","python"]
>>> l
[1, 2, 'stackoverflow', 'python']
>>> tup = tuple(l)
>>> type(tup)
<type 'tuple'>
>>> tup
(1, 2, 'stackoverflow', 'python')

चतुर तरीके से

>>>tuple(item for item in l)
(1, 2, 'stackoverflow', 'python')

याद रखें कि टूपल अपरिवर्तनीय है, जिसका उपयोग किसी मूल्यवान चीज के भंडारण के लिए किया जाता है। उदाहरण के लिए पासवर्ड, कुंजी या हैश ट्यूपल्स या शब्दकोशों में संग्रहीत किए जाते हैं। यदि चाकू की जरूरत है तो सेब को काटने के लिए तलवार का उपयोग क्यों किया जाए। इसे बुद्धिमानी से उपयोग करें, यह आपके कार्यक्रम को कुशल भी बनाएगा।


2
दूसरे तरीके का फायदा क्या है?
दादी ऑचिंग

@GrannyAching स्मार्ट की इस आधुनिक दुनिया में परिभाषा बदलती रहती है, क्योंकि यह एक लाइन में किया गया आलसी दृष्टिकोण है, मुझे लगता है कि यह स्मार्ट तरीका है।
TheExorcist

1
tuple(l)(पहला तरीका) tuple(item for item in l)(दूसरे तरीके) से छोटा है ।
ग्रैनी ऑचिंग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.