पायथन में एक सूची को अनपैक करें?


222

मुझे लगता है कि 'अनपैक' यहां गलत शब्दावली हो सकती है - माफी क्योंकि मुझे यकीन है कि यह एक डुप्लिकेट प्रश्न है।

मेरा प्रश्न बहुत सरल है: एक फ़ंक्शन में जो आइटमों की एक सूची की अपेक्षा करता है, मैं एक त्रुटि प्राप्त किए बिना पायथन सूची आइटम कैसे पारित कर सकता हूं?

my_list = ['red', 'blue', 'orange']
function_that_needs_strings('red', 'blue', 'orange') # works!
function_that_needs_strings(my_list) # breaks!

निश्चित रूप से सूची का विस्तार करने और फहराए जाने वाले समारोह 'red','blue','orange'को पारित करने का एक तरीका होना चाहिए ?

जवाबों:



32

हां, आप *args(स्पैट) सिंटैक्स का उपयोग कर सकते हैं :

function_that_needs_strings(*my_list)

जहां my_listकोई पुनरावृत्ति हो सकती है; पायथन दिए गए ऑब्जेक्ट पर लूप करेगा और फ़ंक्शन के लिए एक अलग तर्क के रूप में प्रत्येक तत्व का उपयोग करेगा।

कॉल एक्सप्रेशन डॉक्यूमेंट देखें ।

दो सितारों का उपयोग करते हुए एक कीवर्ड-पैरामीटर समान है:

kwargs = {'foo': 'bar', 'spam': 'ham'}
f(**kwargs)

और फ़ंक्शन हस्ताक्षर में सभी तर्कों को निर्दिष्ट करने के लिए बराबर वाक्यविन्यास है :

def func(*args, **kw):
    # args now holds positional arguments, kw keyword arguments

14

पायथन 3.5 के बाद से आप असीमित मात्रा में listएस पैक कर सकते हैं ।

पीईपी 448 - अतिरिक्त अनपैकिंग सामान्यीकरण

तो यह काम करेगा:

a = ['1', '2', '3', '4']
b = ['5', '6']
function_that_needs_strings(*a, *b)

1
मैं अजगर 2.7 या 3.4 के साथ भी ऐसा कैसे कर सकता हूं?
उत्तरशिक्षक

1
@answerSeeker कुशल नहीं है, लेकिनfunction_that_needs_strings(*(a+b))
Azalea
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.