将2维列表更改为1维

时间:2012-03-26 22:57:24

标签: python list function multidimensional-array

  

可能重复:
  Flattening a shallow list in Python

我想创建一个采用二维列表并输出具有相同内容的一维列表的函数。 这就是我所拥有的:

twoDlist= [[23, 34, 67],[44,5,3],[7,8,9]]

def twoone (list1):

for x in range (len(list1)):
    for y in range(len(list1)):
        list2=[]
        list2.append(list1[x][y])

print twoone(twoDlist)

只有问题才会返回'无'。我在这做错了什么?有人可以建议一个更好的主意吗?

3 个答案:

答案 0 :(得分:1)

这里有两个问题,第一个是你没有返回一个值,第二个是你将list2重置为嵌套循环内的空列表,所以最后你只有一个其中的元素。

以下是修改代码的方法:

def twoone(list1):
    list2 = []
    for x in range(len(list1)):
        for y in range(len(list1)):
            list2.append(list1[x][y])
    return list2

>>> twoone(twoDlist)
[23, 34, 67, 44, 5, 3, 7, 8, 9]

但是,有更好的方法可以做到这一点,请参阅jtbandes评论中的链接。

最好的方法是itertools.chain()

>>> from itertools import chain
>>> list(chain.from_iterable(twoDlist))
[23, 34, 67, 44, 5, 3, 7, 8, 9]

答案 1 :(得分:1)

您的方法返回None的原因是它没有return语句。但是,即使使用return语句,结果也是错误的。正如其他答案所指出的那样,在循环外部初始化list2(并返回list2)可以解决问题。

您还可以使用嵌套列表推导来更紧凑地完成任务。

def twoone(list1):
    return [val for lst in list1 for val in lst]

答案 2 :(得分:0)

它发生的原因是你在每次迭代中都将list2重新初始化为[]。尝试在forone循环中初始化list2部分。