2011-03-15 86 views
11

Python中的方法appendextend本質上不起作用,它們修改被調用方並返回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

啊,謝謝。現在我意識到,這是一個非常愚蠢的問題。 – 2011-03-15 16:48:54

5

可以重寫爲:

[first] + args 
+0

謝謝:)。我不能相信我已經忘記了這件事。 – 2011-03-15 16:49:51