将二维数据转化为一位数组(多重生成器小结)

嵌套生成器方法:

ab = [[1,2,3], [5,8,9,0], [7,8,9]]
print([i for item in ab for i in item]) 
#[1, 2, 3, 5, 8, 9, 0, 7, 8, 9]

原理:将ab二维数组先转换成生成器,在将这个生成器继续转换成更细(一维)的生成器

同理,也可将三维数组转换成二维数组

ab = [[[1,2,3], [5,8,9,0], [7,8,9]],[[1,1,1], [5,8,9,0], [7,8,9]]]
print([i for item in ab for i in item]) 
#[[1, 2, 3], [5, 8, 9, 0], [7, 8, 9], [1, 1, 1], [5, 8, 9, 0], [7, 8, 9]]

所以我们也可将三维数组转换成一维数组

ab = [[[1,2,3], [5,8,9,0], [7,8,9]],[[1,1,1], [5,8,9,0], [7,8,9]]]
print([x for item in ab for i in item for x in i]) 
#[1, 2, 3, 5, 8, 9, 0, 7, 8, 9, 1, 1, 1, 5, 8, 9, 0, 7, 8, 9]

如果参数变成这样呢?

ab = [[1,2,3], [4,5], [7,8,9]]
print([i for i in ab for x in i])
#[[1, 2, 3], [1, 2, 3], [1, 2, 3], [4, 5], [4, 5], [7, 8, 9], [7, 8, 9], [7, 8, 9]]

当生成器又产生新的生成器,那么不管有没有改变他原有的生成器,都会使原有的生成器增加它本身长度的倍数。

例:[1,2,3]的长度为3,那么两遍生成器后就为[1, 2, 3], [1, 2, 3], [1, 2, 3]

猜你喜欢

转载自www.cnblogs.com/luocodes/p/13378992.html