0
点赞
收藏
分享

微信扫一扫

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

Jonescy 2023-06-12 阅读 110

一、题目要求

参考编程模板计算两个列表 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)))

三、学后反思

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

相关推荐

0 条评论