首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将水平列表翻转为垂直列表,将垂直列表翻转为水平列表。

将水平列表翻转为垂直列表,将垂直列表翻转为水平列表。
EN

Stack Overflow用户
提问于 2021-04-28 08:19:35
回答 3查看 2.9K关注 0票数 0

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

例如:

代码语言:javascript
运行
复制
flip_list([1, 2, 3, 4]) ➞ [[1], [2], [3], [4]]
flip_list([[5], [6], [9]]) ➞ [5, 6, 9]

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

我试过几种方法,但没能让他们开始工作。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-04-28 08:30:56

不如:

代码语言:javascript
运行
复制
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来检查它是否是一个实例,如果是内置列表类。

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

代码语言:javascript
运行
复制
> lst = [[5], [6], [9]]
> [el[0] for el in lst]
[5, 6, 9]

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

代码语言:javascript
运行
复制
> lst = [1, 2, 3, 4]
> [[el] for el in lst]
[[1], [2], [3], [4]]
票数 1
EN

Stack Overflow用户

发布于 2021-04-28 08:31:17

我会有这样的东西:

代码语言:javascript
运行
复制
def flip_list(list_flip):
    if isinstance(list_flip[0],list): return [x[0] for x in list_flip]
    else: return [[x] for x in list_flip]
票数 0
EN

Stack Overflow用户

发布于 2021-04-28 09:05:35

也许你可以试试这样的方法:

代码语言:javascript
运行
复制
def flip_list(arr):
    return [j for i in arr for j in i] \
        if (isinstance(arr[0], list)) \
        else list(map(lambda x: [x], arr))


print(flip_list([[1, 2, 3], [2, 2], [3]]))
print(flip_list([1, 2, 3]))
print(flip_list([[1], [2], [3]]))

'''
Output: 
[1, 2, 3, 2, 2, 3]
[[1], [2], [3]]
[1, 2, 3]
'''
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67296420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档