如何实现列表间的笛卡尔积式除法运算?含代码错误排查需求
解决列表笛卡尔积形式的两两除法问题
别慌,这个问题其实很好解决,核心就是要实现两个列表元素的笛卡尔积遍历+除法运算,我们一步步来拆解:
首先,你想要的效果是:拿list1里的每一个元素,分别除以list2里的每一个元素,然后输出所有结果。你之前尝试的answer = number / list2写法不对,因为Python不支持直接用数字除以整个列表,必须逐个取出list2里的元素来运算。
方法1:嵌套循环(最直观易懂)
这是最直接的实现方式,用两层循环遍历两个列表的所有元素组合:
list1 = [1,2,3] list2 = [3,2,1] # 遍历list1的每个元素 for num1 in list1: # 对每个num1,遍历list2的每个元素做除法 for num2 in list2: print(num1 / num2)
方法2:列表推导式(更简洁)
如果想先把所有结果存起来再输出,可以用列表推导式一次性生成所有结果:
list1 = [1,2,3] list2 = [3,2,1] # 生成所有除法结果的列表 results = [num1 / num2 for num1 in list1 for num2 in list2] # 逐个打印结果 for res in results: print(res)
方法3:用itertools.product(专门处理笛卡尔积)
Python标准库的itertools模块里的product函数可以直接生成两个列表的笛卡尔积元组,代码会更清晰:
import itertools list1 = [1,2,3] list2 = [3,2,1] # 遍历笛卡尔积的每个元素对 for num1, num2 in itertools.product(list1, list2): print(num1 / num2)
关于你之前代码的问题
你提到运行原代码时会重复使用matchhigh的最后一个元素,大概率是缩进错误!要确保内层的for matchlow in lowestnumbers:循环是完全嵌套在for matchhigh in highestnumbers:的缩进块里的,否则内层循环只会在最后一个matchhigh时执行。
运行上面任意一种方法,都能得到你期望的输出:
0.3333333333333333 0.5 1 0.6666666666666667 1 2 1 1.5 3
内容的提问来源于stack exchange,提问作者Mario
相关产品推荐
相关产品推荐

