我想要创建一个函数,该函数将水平列表翻转为垂直列表,将垂直列表转换为水平列表。就像取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]第一个是水平到垂直的,第二个是垂直到水平的。
我试过几种方法,但没能让他们开始工作。
发布于 2021-04-28 08:30:56
不如:
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]]发布于 2021-04-28 08:31:17
我会有这样的东西:
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]发布于 2021-04-28 09:05:35
也许你可以试试这样的方法:
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]
'''https://stackoverflow.com/questions/67296420
复制相似问题