2013-08-27 98 views
0

我一直想弄清楚如何編碼一個函數,它將連接任何數量的使用splat的列表。連接splatted列表

下面的代碼是,我已經得到了我想要的是最接近的,但我試圖讓該函數的輸出,看起來像這樣的列表:

[1,2,3,4,5,6,7,8,9] 

但我只最終顯示爲三個嵌套列表。任何幫助將非常感激。謝謝。

m = [1, 2, 3] 
n = [4, 5, 6] 
o = [7, 8, 9] 

# Update the below function to take 
# an arbitrary number of arguments 
def join_lists(*args): 
    return args 


print join_lists(m, n, o) 

回答

2

既然你都僅限於「基本」功能(如在最近的評論中公開的),這裏是一個簡短的列表理解:

def join_lists(*args): 
    return [i for L in args for i in L] 

,或者展開嵌套的循環(完全等同) :

def join_lists(*args): 
    out = [] 
    for L in args: 
     for i in L: 
      out.append(i) 
    return out 
8

itertools來救援!

def join_lists(*args): 
    return list(itertools.chain(*args)) 
+0

在離開問題幾天後,我想出了這個函數,並想知道爲什麼我得到一個錯誤消息說「只能連接列表(而不是元組)列表。謝謝! 米= [1,2,3] N = [4,5,6] O = [7,8,9] #更新以下功能採取 #的任意數量的參數 DEF join_lists (*參數): masterList = [] I = 0 而I <= LEN(參數): masterList = masterList + ARGS I + = 1個 打印join_lists(M,N,O) 也我似乎有問題瓦特/迷你markdown代碼格式化甚至瓦特/ indentations –

+0

你需要做'masterList = masterList + args [我]'。但是,我建議使用'masterList.extend(args [i])'。 – nneonneo

2

萬一你想代碼手:)

>>> def joinlists(*args): 
...  l = [] 
...  for arg in args: 
...    l.extend(arg) 
...  return l 
... 
>>> joinlists(m, n, o) 
[1, 2, 3, 4, 5, 6, 7, 8, 9] 

或本: -

>>> def joinlists(*args): 
...  l = [] 
...  for arg in args: 
...   for item in arg: 
...    l.append(item) 
...  return l 
... 
>>> joinlists(m, n, o) 
[1, 2, 3, 4, 5, 6, 7, 8, 9] 
+0

感謝您的建議!就我所知,我希望將自己限制在本節課所涉及的功能上,不幸的是,這會排除extend()和itertools。鑑於課程的性質,我不確定我如何能夠傳達什麼是允許的,什麼不是。我可以說最好的是,這是關於codecademy的python課程的一個非常介紹性的部分。
爲了供您參考,可以在這裏找到這個課程(http://www.codecademy.com/courses/python-beginner-nzzVa/4/2?curriculum_id=4f89dab3d788890003000096) –

+1

是的,這有點限制。另一方面,由於Codeacademy本質上是圍繞自學而建立的,所以我建議通過探索Python文檔來找到實現課程內容的方法,這將使你成爲一個更強大,更強大的Python程序員。長遠來看。花一些時間閱讀內置類型的文檔,看看有什麼可能會找到像'list.extend()'這樣的解決方案,再稍微探索一下會幫助你找到'itertools'。 –

2

您可以使用reduce(lambda x,y: x+y, args)

>>> m = [1, 2, 3] 
>>> n = [4, 5, 6] 
>>> o = [7, 8, 9] 
>>> 
>>> def join_lists(*args): 
...  return reduce(lambda x,y: x+y, args) 
... 
>>> join_lists(m,n,o) 
[1, 2, 3, 4, 5, 6, 7, 8, 9] 
>>> 

reduce(operator.add, args)

>>> import operator 
>>> 
>>> m = [1, 2, 3] 
>>> n = [4, 5, 6] 
>>> o = [7, 8, 9] 
>>> 
>>> def join_lists(*args): 
...  return reduce(operator.add, args) 
... 
>>> print join_lists(m,n,o) 
[1, 2, 3, 4, 5, 6, 7, 8, 9] 
>>>