2015-12-05 7 views
5

मुझे यकीन है कि ऐसा करने का एक तरीका है, लेकिन मैं इसे नहीं ढूंढ पाया। मेरे पास है कहते हैं:मानचित्र के लिए तर्कों के लिए नेस्टेड सूची को अनपैक करें()

foo = [ 
    [1, 2], 
    [3, 4], 
    [5, 6] 
] 

def add(num1, num2): 
    return num1 + num2 

तो मैं कैसे उपयोग कर सकते हैं map(add, foo) ऐसी है कि वह num1=1, num2=2 गुजरता पहले यात्रा के लिए, यानी, वह दूसरा, आदि के लिए add(1, 2) करता है, तो add(3, 4)?

  • map(add, foo) कोशिश कर रहा है स्पष्ट रूप से पहली यात्रा

मैं map(add, foo) की तरह कुछ पहले यात्रा पर add(1, 2) क्या करना चाहते हैं के लिए add(1, 3, 5) करता पहली यात्रा

  • map(add, *foo) कोशिश कर रहा है के लिए add([1, 2], #nothing) करता है।

    अपेक्षित उत्पादन: [3, 7, 11]

  • +1

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

    उत्तर

    7

    ऐसा लगता है कि आप starmap की जरूरत है:

    >>> import itertools 
    >>> list(itertools.starmap(add, foo)) 
    [3, 7, 11] 
    

    यह प्रत्येक तर्क [a, b] सूची foo से आप के लिए, unpacks उन्हें समारोह add को गुजर। itertools मॉड्यूल में सभी टूल्स के साथ, यह एक पुनरावर्तक देता है जिसे आप list अंतर्निहित फ़ंक्शन के साथ उपभोग कर सकते हैं।

    दस्तावेजों से:

    जब तर्क पैरामीटर पहले से ही एक iterable से tuples में बांटा जाता है (डेटा कर दिया गया है "पूर्व ज़िपित") map() के बजाय प्रयोग किया जाता है। map() और starmap() के बीच का अंतर function(a,b) और function(*c) के बीच भेद के समानांतर है।

    +1

    यह पता करने के लिए अच्छा नहीं कर रहे हैं वाह, । :) –

    +0

    फिर से प्रश्न पढ़ने के बाद ऐसा लगता है कि हम सभी गलत हैं क्योंकि ओपी '(1, 2') जोड़ना चाहता है, फिर' जोड़ें (2, 3) '... जब तक कि ओपी –

    +0

    ' [3, 7, 11] 'वास्तव में मेरे उदाहरण के लिए अपेक्षित परिणाम है :) – binaryfunt

    1

    इस प्रयास करें:

    foo = [ 
        [1, 2], 
        [3, 4], 
        [5, 6]] 
    
    def add(num1, num2): 
         return num1 + num2 
    
    print(map(lambda x: add(x[0], x[1]), foo)) 
    
    +0

    सही किया है यह एजेसीआर के उत्तर से थोड़ा तेज हो सकता है – binaryfunt

    0

    एक पूरी तरह से वैध विधि (यहां तक ​​कि ajcr के जवाब के रूप में के रूप में पढ़ा नहीं जा सकता है), लेकिन किसी कारण से इसे हटा दिया गया के साथ एक और जवाब नहीं था। मैं इसे पुन: पेश करने जा रहा हूँ, यह कुछ स्थितियों

    >>> map(add, *zip(*foo)) 
    [3, 7, 11] 
    
    संबंधित मुद्दे