Python实现函数u=Σ(n*x*y)的代码求助(n、x、y为序列/数组)
解决Python计算u数组的问题
首先明确你的需求:对x和y中对应位置的元素对(x_i, y_i),计算所有nn∈n的nnx_iy_i之和,把每个结果存入u数组。
你原有代码的问题
- Python循环关键字是小写
for,不是For,大小写错误会直接报错 - 列表不能直接用
*做元素相乘,x*y的写法在Python里是非法操作(除非是列表重复,但完全不符合你的需求) - 循环逻辑搞反了:你需要遍历x和y的元素对,而非遍历n中的每个数
方法1:直观嵌套循环(新手易理解)
先定义好所有变量,通过嵌套循环逐个计算每个u_i的值:
x = [1, 2, 3, 4, 5] y = [6, 7, 8, 9, 10] n = list(range(1, 101)) # 生成1到100的整数列表 u = [] # 同时遍历x和y的对应元素 for xi, yi in zip(x, y): current_sum = 0 # 遍历n中的每个数,累加计算总和 for nn in n: current_sum += nn * xi * yi u.append(current_sum) print(u)
也可以用列表推导式简化成一行:
u = [sum(nn * xi * yi for nn in n) for xi, yi in zip(x, y)]
方法2:高效优化版(减少重复计算)
观察公式可发现:每个u_i = x_i * y_i * sum(n),因为sum(nn*x_i*y_i) = x_i*y_i * sum(nn)。先计算n的总和,再逐个计算u_i,效率更高:
x = [1, 2, 3, 4, 5] y = [6, 7, 8, 9, 10] n = list(range(1, 101)) sum_n = sum(n) # 1到100的和是5050 u = [xi * yi * sum_n for xi, yi in zip(x, y)] print(u)
这个方法只需要计算一次sum(n),避免了重复遍历n,当n的长度很大时优势明显。
验证结果
比如第一个元素u0 = 165050 = 30300,第二个u1=275050=70700,以此类推,运行代码后得到的u数组完全符合你的需求。
内容的提问来源于stack exchange,提问作者nofugz
相关产品推荐
相关产品推荐

