【问题标题】:Changing 2 dimensional list to a 1 dimensional [duplicate]将二维列表更改为一维 [重复]
【发布时间】:2012-04-10 11:40:33
【问题描述】:

可能重复:
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)

唯一的问题它返回“无”。我在这里做错了什么?有人可以提出更好的主意吗?

【问题讨论】:

    标签: python list function multidimensional-array


    【解决方案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]
    

    【讨论】:

    • 哦,我明白了,谢谢你的帮助。
    【解决方案2】:

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

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

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

    【讨论】:

    • 你带了一个参数list1,但是你使用了lst
    【解决方案3】:

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

    【讨论】:

    • 我的错,你还需要在最后返回列表。
    猜你喜欢
    • 2023-02-19
    • 2010-11-29
    • 2017-11-18
    • 2023-04-11
    • 2017-05-06
    • 2014-06-03
    • 2022-12-29
    • 2016-08-29
    • 2021-08-06
    相关资源
    最近更新 更多