You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python:无嵌套for循环生成双列表笛卡尔积及斐波那契项求和问题

嘿,这两个问题都挺实用的,我来给你详细讲讲怎么解决:

1. 无嵌套for循环生成笛卡尔积

要生成两个列表的笛卡尔积,最省心的方法就是用Python标准库的itertools.product——它专门用来处理这种可迭代对象的笛卡尔积场景,完全不用自己写嵌套循环:

import itertools

a = [1, 2, 3]
b = [4, 5, 6]
c = list(itertools.product(a, b))
print(c)  # 输出: [(1, 4), (1, 5), (1, 6), (2, 4), (2, 5), (2, 6), (3, 4), (3, 5), (3, 6)]

如果不想引入额外库,也可以用扁平列表推导式——虽然看起来有两个for,但它是顺序写法,不是嵌套缩进的循环结构,也符合你“不使用嵌套for循环”的要求:

a = [1, 2, 3]
b = [4, 5, 6]
c = [(x, y) for x in a for y in b]
print(c)  # 输出和上面完全一致
2. 计算所有斐波那契数列第n项的和

首先得搞清楚规律:每一对(x, y)作为前两项的斐波那契数列,第n项是有公式可循的,不用逐个数列去迭代计算到第n项(尤其是n很大时,这种方法效率极低)。

规律推导

设数列第k项为fib_k,则:

  • fib_1 = x
  • fib_2 = y
  • fib_3 = fib_1 + fib_2 = 1*x + 1*y
  • fib_4 = fib_2 + fib_3 = 1*x + 2*y
  • fib_5 = fib_3 + fib_4 = 2*x + 3*y
  • ...
  • 通用公式:fib_n = F(n-2)*x + F(n-1)*y,其中F是标准斐波那契数列(F(1)=1, F(2)=1, F(3)=2, F(4)=3, F(5)=5...)

基于这个公式,所有数列第n项的总和就可以拆解为:

总和 = F(n-2) * 所有x的和 + F(n-1) * 所有y的和

代码实现

先写一个高效的迭代版斐波那契函数(避免递归的性能问题):

def get_fib(k):
    if k == 1 or k == 2:
        return 1
    prev, curr = 1, 1
    for _ in range(3, k + 1):
        prev, curr = curr, prev + curr
    return curr

然后计算总和:

# 先拿到之前生成的笛卡尔积c
a = [1, 2, 3]
b = [4, 5, 6]
c = list(itertools.product(a, b))

# 计算所有x的和与所有y的和
sum_x = sum(x for x, y in c)
sum_y = sum(y for x, y in c)

# 计算n=3时的总和
n = 3
coeff_x = get_fib(n - 2)  # get_fib(1) = 1
coeff_y = get_fib(n - 1)  # get_fib(2) = 1
total = coeff_x * sum_x + coeff_y * sum_y
print(total)  # 输出: 63,和示例完全匹配

如果n=4,按照这个方法计算:coeff_x = get_fib(2)=1,coeff_y=get_fib(3)=2,sum_x=18,sum_y=45,总和=118 +245=108,手动验证也完全正确。

内容的提问来源于stack exchange,提问作者Anonymous

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:46:21