कैसे एक टपल के लिए मूल्य जोड़ने के लिए?


80

मैं एक स्क्रिप्ट पर काम कर रहा हूं, जहां मेरे पास ट्यूपल्स की सूची है ('1','2','3','4')। जैसे:

list = [('1','2','3','4'),
        ('2','3','4','5'),
        ('3','4','5','6'),
        ('4','5','6','7')]

अब मैं जोड़ने की जरूरत है '1234', '2345', '3456'और '4567'प्रत्येक टपल के अंत में क्रमशः। जैसे:

list = [('1','2','3','4','1234'),
        ('2','3','4','5','2345'),
        ('3','4','5','6','3456'),
        ('4','5','6','7','4567')]

क्या यह किसी भी तरह से संभव है?


8
क्रॉस-भाषा समाधान? ;)
स्नोबैयर

2
StackOverflow में आपका स्वागत है! दाईं ओर जब आप अपना प्रश्न पूछ रहे थे, तो यह आसान था कि कैसे प्रारूप बॉक्स में जाएं। एक रीड वर्थ, जैसा कि प्रश्न क्षेत्र के ठीक ऊपर [?] से जुड़ा पेज है।
टीजे क्राउडर

3
कम से कम पायथन में, टुपल्स अपरिवर्तनीय हैं। यदि आप "एक टपल में कुछ जोड़ना चाहते हैं", तो शुरू से ही एक परस्पर डेटा संरचना का उपयोग क्यों नहीं करें?
फेलिक्स क्लिंग

2
मैं इसे भी करता हूं - सबसे अधिक बार "फाइल" के साथ, क्योंकि "फाइलों में फ़ाइल के लिए" इतना स्वाभाविक है! - लेकिन सामान्य तौर पर आपको अपनी सूचियों को "सूची" कहने से बचना चाहिए, जो अंतर्निहित "सूची" को बदल देता है।
DSM

जवाबों:


138

ट्यूप्स अपरिवर्तनीय हैं और इन्हें बदला नहीं जाना चाहिए - यही वह है जो सूची प्रकार के लिए है। आप प्रत्येक टपल को बदल सकते हैं originalTuple + (newElement,), इस प्रकार एक नया टपल बना सकते हैं। उदाहरण के लिए:

t = (1,2,3)
t = t + (1,)
print t
(1,2,3,1)

लेकिन मैं शुरू से सूचियों के साथ जाने का सुझाव देता हूं, क्योंकि वे आइटम डालने के लिए तेज़ हैं।

और एक और संकेत: listअपने प्रोग्राम में अंतर्निहित नाम को अधिलेखित न करें, बल्कि चर lया किसी अन्य नाम को कॉल करें । यदि आप अंतर्निहित नाम को अधिलेखित करते हैं, तो आप इसे वर्तमान दायरे में उपयोग नहीं कर सकते।


23
एक शॉर्टहैंडt += 1,

1
उत्कृष्ट बिंदु, हालांकि, मैं उस दुर्भाग्यपूर्ण स्थिति में हूं जहां मैं sqlite3डेटाबेस में मूल्यों को जोड़ना चाहता हूं और जोड़ने के लिए मूल्यों का एक समूह बनाने की आवश्यकता है (चूंकि आवश्यक वाक्यविन्यास है VALUES (v1, v2, v3, ...)। इस मामले में, मूल्यों को जोड़ने के तरीके को जानना। tuple बहुत फायदेमंद है।
HS-nebula

16

सिंटैक्स के आधार पर, मैं अनुमान लगा रहा हूं कि यह पायथन है। टपल की बात यह है कि यह अपरिवर्तनीय है, इसलिए आपको प्रत्येक तत्व को एक नए टपल के साथ बदलने की आवश्यकता है:

list = [l + (''.join(l),) for l in list]
# output:
[('1', '2', '3', '4', '1234'), 
 ('2', '3', '4', '5', '2345'), 
 ('3', '4', '5', '6', '3456'), 
 ('4', '5', '6', '7', '4567')]

5
यह काम करता है, निश्चित। लेकिन क्या वाकई ऐसा किया जाना चाहिए? मैं सोचता हूं। क्योंकि यह पहली जगह में एक टपल होने के उद्देश्य को पराजित करता है। या मैं गलत हूँ?
user225312

9

अजगर में, आप नहीं कर सकते। टुपल्स अपरिवर्तनीय हैं।

युक्त सूची में, आप हालांकि ('1', '2', '3', '4')एक अलग ('1', '2', '3', '4', '1234')tuple के साथ tuple को बदल सकते हैं ।


9

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

उस ने कहा, अतिरिक्त ऑपरेटर के साथ एक नया टपल बनाने के लिए एक और विकल्प स्पैट ऑपरेटर का उपयोग करना है:

new_tuple = (*old_tuple, 'new', 'items')

मुझे यह सिंटैक्स पसंद है क्योंकि यह एक नया टपल जैसा दिखता है , इसलिए यह स्पष्ट रूप से संचार करता है कि आप क्या करने की कोशिश कर रहे हैं।

स्पैट का उपयोग करना, एक संभावित समाधान है:

list = [(*i, ''.join(i)) for i in list]


7

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

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


4

मैं से संबंधित कुछ विवरण के माध्यम से जा रहा था tupleऔर listहै, और क्या मैं समझ गया है:

  • ट्यूपल Heterogeneousसंग्रह डेटा प्रकार हैं
  • टपल की निश्चित लंबाई (प्रति ट्यूपल प्रकार) है
  • ट्यूपल हमेशा परिमित होते हैं

तो एक टुपल के लिए नए आइटम को जोड़ने के लिए list, इसे करने के लिए और उस append()पर ऑपरेशन करने की आवश्यकता है, फिर इसे फिर से ट्यूपल में डाली।

लेकिन व्यक्तिगत रूप से मुझे इस प्रश्न के बारे में क्या महसूस हुआ, अगर टुपल्स को परिमित , निश्चित लंबाई की वस्तुओं के रूप में माना जाता है और यदि हम अपने एप्लिकेशन लॉजिक्स में उन डेटा प्रकारों का उपयोग कर रहे हैं, तो नए आइटमों को जोड़ने या आइटम मूल्य को अपडेट करने के लिए कोई परिदृश्य नहीं होना चाहिए । यह। तो टुपल्स की सूची के बजाय यह सूची की सूची ही होनी चाहिए , क्या मैं इस पर सही हूं?


1
ऐसे परिदृश्य हैं जहां आपको एक फ़ंक्शन के लिए एक टपल को पास करने की आवश्यकता होती है, जैसे कि SQL (psycopg2) या R (rpy2) के साथ बातचीत करना। कार्य हमेशा ठीक से काम नहीं करते हैं अगर एक सूची के बजाय एक tuple दिया जाता है। कभी-कभी आपको एक सूची के बजाय एक फ़ंक्शन से एक टुपल भी प्राप्त होता है। Tuples गलती से किसी मूल सूची को संशोधित करने से बच सकते हैं, जब आपको किसी सूची की एक प्रति पर काम करना चाहिए। तो हां, प्रस्तुत उत्तरों में प्रत्यक्ष या अप्रत्यक्ष रूप से सूचीबद्ध बिचौलिया हैं। हालांकि, अंत में एक ट्यूपल पर कास्टिंग करना अभी भी कई परिदृश्यों में तर्कसंगत है।
नैट वेनर

2
    list_of_tuples = [('1', '2', '3', '4'),
                      ('2', '3', '4', '5'),
                      ('3', '4', '5', '6'),
                      ('4', '5', '6', '7')]


    def mod_tuples(list_of_tuples):
        for i in range(0, len(list_of_tuples)):
            addition = ''
            for x in list_of_tuples[i]:
                addition = addition + x
            list_of_tuples[i] = list_of_tuples[i] + (addition,)
        return list_of_tuples

    # check: 
    print mod_tuples(list_of_tuples)

0
OUTPUTS = []
for number in range(len(list_of_tuples))):
    tup_ = list_of_tuples[number]
    list_ = list(tup_)  
    item_ = list_[0] + list_[1] + list_[2] + list_[3]
    list_.append(item_)
    OUTPUTS.append(tuple(list_))

OUTPUTS वही है जो आप चाहते हैं

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