0

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

在下面的函数中;

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

4 回答 4

9

extend()代替append(): _

 totalList.extend(returnList())

做你想要的。

于 2012-11-06T19:52:55.593 回答
0

itertools 文档

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

这当然是假设您不能只更改append()extend().

于 2012-11-06T19:55:42.327 回答
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]
于 2012-11-06T20:06:34.563 回答
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))
于 2012-11-07T02:36:01.790 回答