python - 简单算法题 - 生成矩阵

生成矩阵

题目要求

已知两个列表

lst_1 = [1, 2, 3, 4]
lst_2 = ['a', 'b', 'c', 'd']

请写算法,将两个列表交叉相乘,生成如下的矩阵

[['1a', '2a', '3a', '4a'],
 ['1b', '2b', '3b', '4b'],
 ['1c', '2c', '3c', '4c'],
 ['1d', '2d', '3d', '4d']]

思路分析

根据观察,矩阵的横列表个数取决于lst_1,竖列表个数取决于lst_2,可以先对lst_2进行for 循环处理,再嵌套一层lst_1的for循环遍历添加列表,最终添加的列表进行追加。

示例代码

import pprint
lst_1 = [1, 2, 3, 4]
lst_2 = ['a', 'b', 'c', 'd']

result_lst = []
for i in lst_2:
    tmp_lst = []
    for j in lst_1:
        value = str(j) + i
        tmp_lst.append(value)
    result_lst.append(tmp_lst)


pprint.pprint(result_lst)

分析时间复杂度

for i in lst_2 遍历n复杂度为4,f(n) = n

for j in lst_1遍历n复杂度为4,但是嵌套在上个列表中,所以复杂度为f(n) = n^2

该算法复杂度为f(n)= n^2

优化思考

从逻辑上必须每个值需要遍历后进行组合,所以并没有优化复杂度的空间。

但是可以利用 列表生成式 简化代码

[[str(j) + i for j in lst_1] for i in lst_2]
[['1a', '2a', '3a', '4a'],
 ['1b', '2b', '3b', '4b'],
 ['1c', '2c', '3c', '4c'],
 ['1d', '2d', '3d', '4d']]

一次性想写出最简代码是不可能的,先写出能实现功能的代码,再一步步推进推导。

我个人的思路过程:

先实现一个 列表生成式

for i in lst_2:
    tmp_lst = [str(j) + i for j in lst_1]
    print(tmp_lst)
    
==============================================
['1a', '2a', '3a', '4a']
['1b', '2b', '3b', '4b']
['1c', '2c', '3c', '4c']
['1d', '2d', '3d', '4d']

再将tmp_lst视作整体,再次嵌套 列表生成式

欢迎交流相互学习。

image-20200722093418350

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值