首页 > 解决方案 > 将水平列表翻转为垂直列表,将垂直列表翻转为水平列表

问题描述

我想创建一个将水平列表翻转为垂直列表,将垂直列表翻转为水平列表的函数。就像拿一个 1×n 列表(1 行和 n 列)并将其翻转成一个 n×1 列表(n 行和 1 列),反之亦然。

例如:

flip_list([1, 2, 3, 4]) ➞ [[1], [2], [3], [4]]
flip_list([[5], [6], [9]]) ➞ [5, 6, 9]

第一个是水平到垂直的,第二个是垂直到水平的。

我尝试了几种方法,但无法使它们起作用。

标签: python

解决方案


怎么样:

def flip_list(lst):
    if not lst:
        return lst

    is_vertical = isinstance(lst[0], list)
    
    if is_vertical:
        return [el[0] for el in lst]
    
    return [[el] for el in lst]

首先,我们检查给定lst是否“真实”,请参阅文档lst如果列表为空或无等,这将简单地返回。

您的示例表明,在垂直列表中,每个元素本身都是另一个包含值的列表,代表列。这意味着我们可以在查看第一个元素时确定列表是垂直的还是水平的。

此时我们假设列表不为空,因为我们事先检查过。因此,我们只需获取第一个元素lst[0]并使用内置isinstance检查它是否是内置列表类的实例。

要翻转列表,我们使用列表推导。为了将垂直转换为水平,我们迭代列表的每个元素并将每个元素的第一个元素写入新列表。消除列。

> lst = [[5], [6], [9]]
> [el[0] for el in lst]
[5, 6, 9]

反之亦然,我们将每个元素插入到一个新列表中,创建列:

> lst = [1, 2, 3, 4]
> [[el] for el in lst]
[[1], [2], [3], [4]]

推荐阅读