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. 用列表推导式可以最大限度地减化步骤。

猜你喜欢

转载自blog.csdn.net/henanlion/article/details/131149772
今日推荐