如何用python优雅的实现二维列表平铺

实现二维列表的平铺有两种方法

  • 逐一遍历列表中的元素,并添加到一个新列表当中
  • 对每一行进行拼接,列表之间相加

逐一遍历列表中的元素,并添加到一个新列表当中

先来看最C的方法

>>>alist = [[1,2,3],[4,5,6],[7,8,9]]
>>> res = []
>>> for i in alist:
	for j in i:
		res.append(j)

		
>>> res
[1, 2, 3, 4, 5, 6, 7, 8, 9]

这个操作可以用列表推导式来生成,如下

>>>alist = [[1,2,3],[4,5,6],[7,8,9]]
>>> [j for i in alist for j in i]
[1, 2, 3, 4, 5, 6, 7, 8, 9]

瞬间爽了很多~~
此列表推导式的格式就是:
[①以什么为列表元素,需要对这个元素进行什么处理 ②遍历获取这个元素 ③条件判断]

对每一行进行拼接,列表之间相加

先看一个最low的:-)
这个就是直接实现列表相加而已。

>>>list = [[1,2,3],[4,5,6],[7,8,9]]
>>> x = []
>>> for row in alist:
	x += row

	
>>> x
[1, 2, 3, 4, 5, 6, 7, 8, 9]

这个也可以写成

>>>list = [[1,2,3],[4,5,6],[7,8,9]]
>>> x = []
>>> for row in alist:
	x += [*row]# 解包在转化为列表。。。

	
>>> x
[1, 2, 3, 4, 5, 6, 7, 8, 9]

最后来一种最优雅的方式,使用内置函数sum()

alist = [[1,2,3],[4,5,6],[7,8,9]]
>>> sum(alist, [])
[1, 2, 3, 4, 5, 6, 7, 8, 9]

这个方法的原理是使用sum函数,sum(iter,start),start指的就是要计算的起始值,此处为空列表。值得注意的是,虽然字符串是可迭代的,但是sum函数不能执行字符串之间的相加。我们都是到 ‘abc’ + ‘def’ = 'abcdef’但是这货不可以这样操作,如下

>>> _list = ['abc', 'def']
>>> sum(_list)
Traceback (most recent call last):
  File "", line 1, in <module>
    sum(_list)
TypeError: unsupported operand type(s) for +: 'int' and 'str'

这个操作一般用’’.join(iter)来实现。

你可能感兴趣的:(Python,基础,Python,二维列表平铺)