Python将列表添加到仅包含元素的单个列表中

时间:2012-11-06 19:49:49

标签: python list

抱歉尴尬的标题,但我会在这里解释得更好;

在下面的函数中;

def returnList():
  list = []
  for i in xrange(4):
    list.append(i)

  return list

返回列表[0,1,2,3]。在另一个功能;

def returnAllLists():
  totalList = []
  for i in xrange(4):
    totalList.append(returnList())

  return totalList

正如预期的那样,结果如

[[1,2,3,4],[1,2,3,4],[1,2,3,4],[1,2,3,4]]
。棘手的部分是我需要结果
[1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4]
。我当然可以轻松地将returnAllList的结果分配给另一个列表并进行两个循环并将这些元素单独插入另一个列表但是我认为可以采用更有效的方法,因为我的方法有一个 O(N ^ 2)复杂度仅用于以不同方式分配相同的值。有什么建议吗?

4 个答案:

答案 0 :(得分:9)

使用extend()代替append()

 totalList.extend(returnList())

完全符合你的要求。

答案 1 :(得分:0)

来自itertools documentation

def flatten(listOfLists):
    "Flatten one level of nesting"
    return chain.from_iterable(listOfLists)

当然,假设您不能将append()更改为extend()

答案 2 :(得分:0)

类似的东西:

In [17]: lis=[[1,2,3,4],[1,2,3,4],[1,2,3,4],[1,2,3,4]]

In [18]: sum(lis,[])
Out[18]: [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]

答案 3 :(得分:0)

     python 3.2

    a=[[1,2,3,4],[1,2,3,4],[1,2,3,4],[1,2,3,4]]        


    res=[i for v in a for i in v]


    another method:
    list(i.chain(*a))