2013-08-27 62 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] 
>>>