python二级题:计算向量积即列表元素对应相乘的四种方法

一、题目要求

参考编程模板计算两个列表 ls 和 lt 对应元素乘积的和(即向量积),完善程序。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬

ls = [111, 222, 333, 444, 555, 666, 777, 888, 999]‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬
lt = [999, 777, 555, 333, 111, 888, 666, 444, 222]‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬示例1:‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬

输入:无
输出:"99999"

修改原题

ls = [111, 222, 333, 444, 555, 666, 777, 888, 999]
lt = [999, 777, 555, 333, 111, 888, 666, 444, 222]
s = 0
......
print(s)

二、多种解法

1. 官方解法

主要采用的是切表切片的方法,分别从两个列表中取值后相乘,再用for循环相加。

ls = [111, 222, 333, 444, 555, 666, 777, 888, 999]
lt = [999, 777, 555, 333, 111, 888, 666, 444, 222]
s = 0
for i in range(len(ls)):
    s += ls[i]*lt[i]      #对应i位置的元素相乘后累加
print(s)

2. 利用列表推导式

可以采用zip()把两个列表组后和用列表推导式来生成新的列表,最后用sum来求和

ls = [111, 222, 333, 444, 555, 666, 777, 888, 999]
lt = [999, 777, 555, 333, 111, 888, 666, 444, 222]
print(sum(s*t for s,t in zip(ls,lt)))

也可以把官方的代码修改一下,借助列表推导式解决

print(sum([ls[i]*lt[i] for i in range(len(ls))]))

3. 用enumerate和循环的方法

用enumerate来生成列表的索引号,然后用for循环来求和

ls = [111, 222, 333, 444, 555, 666, 777, 888, 999]
lt = [999, 777, 555, 333, 111, 888, 666, 444, 222]
sum = 0
for index, s in enumerate(ls):
     sum + = lt[index]
print(sum)

4. 采用pd.Series解决

利和pandas中的Series可以相乘的原理来解决。但是这种方法的前提是已经安装了pandas,否则就会失效。

import pandas as pd
ls = [111, 222, 333, 444, 555, 666, 777, 888, 999]
lt = [999, 777, 555, 333, 111, 888, 666, 444, 222]
print(sum(pd.Series(ls)*pd.Series(lt)))

5. 利用np.array来解决

利用numpy生成一系列的数组,然后两数组相乘就可以科到一个新的列表,直接用sum求和即可。代码如下:

import numpy as np
ls = np.array([111, 222, 333, 444, 555, 666, 777, 888, 999])
lt = np.array([999, 777, 555, 333, 111, 888, 666, 444, 222])
print(sum(ls*lt))
但是,此方法的前提是电脑中要安装numpy包。可以通过pip install numpy来安装。

三、学后反思

  1. 一题多解,殊途同归。尝试多种方法解决同一问题,可以举一反三,增加Python编程的灵活性。
  2. 用列表推导式可以最大限度地减化步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PythonFun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值