本文已参与「新人创作礼」活动,一起开启掘金创作之路。
问题定义
比如有一个list,嵌套了三层:
a = [[1, 2], ['a', 'b', [3, 4]]]
现在想将其变为:
a = [1, 2, '1', 'd', 3, 4]
也就是说,无论嵌套了多少层的list,我们都想将其flatten为一层的list。
解决方案 (一):
实现一个递归函数:
def flatten(nest_list:list):
out = []
for i in nest_list:
if isinstance(i, list):
tmp_list = flatten(i)
for j in tmp_list:
out.append(j)
else:
out.append(i)
return out
解决方案(一行代码):
其实可以更加简化:
def flatten(nest_list:list):
return [j for i in nest_list for j in flatten(i)] if isinstance(nest_list, list) else [nest_list]
测试输出:
a = [[1,2], ['a','b', [3, 4]]]
b = flatten(a)
print(b)
# 输出: [1, 2, 'a', 'b', 3, 4]
好用的话,记得来点赞。
列表
列表用于将多个项目存储在单个变量中。
列表是 Python 中用于存储数据集合的 4 种内置数据类型之一,另外 3 种是Tuple、 Set和Dictionary,它们都具有不同的质量和用途。
列表是使用方括号创建的:
多变
列表是可更改的,这意味着我们可以在创建列表后更改、添加和删除列表中的项目。
允许重复
由于列表是索引的,因此列表可以包含具有相同值的项目:
例子
列表允许重复值:
thislist = ["apple", "banana", "cherry", "apple", "cherry"]
print(thislist)
当您想要基于现有列表的值创建新列表时,列表推导提供了更短的语法。
例子:
基于水果列表,您需要一个新列表,其中仅包含名称中带有字母“a”的水果。
如果没有列表理解,您将不得不编写一个for带有条件测试的语句:
例子
fruits = ["apple", "banana", "cherry", "kiwi", "mango"]
newlist = []
for x in fruits:
if "a" in x:
newlist.append(x)
print(newlist)
使用列表推导,您只需一行代码即可完成所有操作:
例子
fruits = ["apple", "banana", "cherry", "kiwi", "mango"]
newlist = [x for x in fruits if "a" in x]
print(newlist)