利用Python使用一行语句实现嵌套列表的平铺(3种方法)

1.问题引入:

将列表demo_list = [[1, 2, 3], [4, 5, 6], [-1, -2, -3]],每个元素拆开平铺成一个新列表(去掉内层的中括号)。

2.代码

from itertools import chain


"""
python实现嵌套列表的平铺
"""
demo_list = [[1, 2, 3], [4, 5, 6], [-1, -2, -3]]

# 方法一:使用双重for循环的列表推导式,注意观察两个for循环的前后位置(遍历一级元素的语句写在前面)
li1 = [num for elem in demo_list for num in elem]

# 方法二:使用sum函数,将此列表与空列表进行求和
li2 = sum(demo_list, [])

# 方法三:使用chain方法,将三个内层列表元素连起来,再迭代。
li3 = list(chain(*demo_list))  # 可以理解成拆包,拆成内部的每个列表元素

# 注意哦,如果不加*,意味着demo_list本身迭代,结果将是原列表
li4 = list(chain(demo_list))  

print("1.列表推导式方法:%s" % li1)
print("2.使用sum函数:%s" % li2)
print("3.使用chain方法(注意拆包):%s" % li3)
print("4.使用chain方法(非拆包):%s" % li4)

结果:

1.列表推导式方法:[1, 2, 3, 4, 5, 6, -1, -2, -3]
2.使用sum函数:[1, 2, 3, 4, 5, 6, -1, -2, -3]
3.使用chain方法(注意拆包):[1, 2, 3, 4, 5, 6, -1, -2, -3]
4.使用chain方法(非拆包):[[1, 2, 3], [4, 5, 6], [-1, -2, -3]]

3.总结:

  • 1.使用双重for循环的列表推导式:
    注意两个for循环的前后位置(遍历一级元素的语句写在前面),这里吃过亏,顺序错了直接语法错误。

  • 2.sum()方法:

"""
语法:
sum(iterable[, start])
参数:
iterable -- 可迭代对象,如:列表、元组、集合。
start -- 指定相加的参数,如果没有设置这个值,默认为0。
"""
print(sum([0, 1, 2]))   # 3

print(sum((2, 3, 4), 5))  # 元组计算总和后再加 5  =14

# 列表里面必须都是嵌套列表,否则会出错,理解成sum()将可迭代对象的每个元素与[]进行相减即连接,最终结果就是一个平铺的列表。
print(sum([[0, 1], [2], [3, 4]], []))  # [0, 1, 2, 3, 4]  正确
print(sum([[0, 1], 2, [3, 4]], []))  # 报错 TypeError: can only concatenate(连接) list (not "int") to list
  • 3.使用chain方法,将三个内层列表元素连起来,再迭代。
    chain(*demo_list)可以理解成拆包,拆成内部的每个列表元素,
    注意:如果不加*,意味着demo_list本身的一级元素迭代,结果将是原列表。
发布了146 篇原创文章 · 获赞 66 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/qq_38923792/article/details/102566438