2011-03-15 19 views
11

पाइथन में append और extend प्रकृति द्वारा कार्यात्मक नहीं हैं, वे कैली संशोधित करते हैं और None लौटाते हैं।कार्यात्मक संलग्न/

क्या इन तरीकों से क्या करने का एक वैकल्पिक तरीका है और लौटाए गए मूल्य के रूप में एक नई सूची प्राप्त करें?

def myfun(first, *args): 
    for elem in [first].extend(args): 
    print elem 

जाहिर है, इस काम नहीं करेगा:

इस उदाहरण पर विचार।

क्या निम्नलिखित लिखने के लिए मजबूर होने के बजाय "जगह में" एक नई सूची बनाने का कोई तरीका है?

def myfun(first, *args): 
    all_args = list(first) 
    all_args.extend(args) 

    for elem in all_args: 
    print elem 

धन्यवाद।

उत्तर

14
>>> def append(lst, elem): 
...  return lst + [elem] 
... 
>>> append([1, 2, 3], 4) 
[1, 2, 3, 4] 
>>> def extend(lst1, lst2): 
... return lst1 + lst2 
... 
>>> extend([1, 2], [3, 4]) 
[1, 2, 3, 4]

जैसे आप चाहते हैं कि है?

आप अपना स्वयं का प्रकार है, जो सूची में ही इन आपरेशनों पर देता है, इसके अलावा में बदलने के लिए परिभाषित कर सकते हैं:

>>> class MyList(list): 
... def append(self, x): 
...  super(MyList, self).append(x) 
...  return self 
... def extend(self, lst): 
...  super(MyList, self).extend(lst) 
...  return self 
... 
>>> l = MyList([1, 2, 3]) 
>>> l.append(4) 
[1, 2, 3, 4] 
>>> l.extend([5, 6, 7]) 
[1, 2, 3, 4, 5, 6, 7] 
>>> l 
[1, 2, 3, 4, 5, 6, 7]
+2

आह, धन्यवाद। अब मुझे एहसास है, यह वास्तव में बेवकूफ सवाल था। –

5

आप को फिर से लिखने सकते हैं कि के रूप में:

[first] + args 
+0

धन्यवाद :)। विश्वास नहीं कर सकता मैं इस बारे में भूल गया हूँ। –

संबंधित मुद्दे