【问题标题】:Create new list out of two lists via multiplication. Python通过乘法从两个列表中创建新列表。 Python
【发布时间】:2022-01-13 11:20:29
【问题描述】:

早上好!

我正在尝试通过使用乘法运算从两个列表中生成一个新列表。 下面我一步一步地告诉你我做了什么:

import itertools
from itertools import product
import numpy as np
import pandas as pd

Parameter_list=[]

Parameter=[range(0,2,1),range(0,2,1)]
Parameter_list=list(itertools.product(*Parameter))
print(Parameter_list)

[(0, 0), (0, 1), (1, 0), (1, 1)]

然后我删除了第一个值,基本上就是空矩阵:

del Parameter_list[0]
print(Parameter_list)
[(0, 1), (1, 0), (1, 1)]

我继续创建两个参数列表:

Parameter_A=[range(1,2,1),range(3,6,2),range(10,20,10)]
Parameter_A=list(itertools.product(*Parameter_A))

Parameter_B=[range(0,2,1),range(4,6,2),range(10,20,10)]
Parameter_B=list(itertools.product(*Parameter_B))

print(Parameter_A)
print(Parameter_B)

[(1, 3, 10), (1, 5, 10)]
[(0, 4, 10), (1, 4, 10)]

并合并列表:

comb=list(product(Parameter_A,Parameter_B))
print(comb)

[((1, 3, 10), (0, 4, 10)),
 ((1, 3, 10), (1, 4, 10)), 
 ((1, 5, 10), (0, 4, 10)), 
 ((1, 5, 10), (1, 4, 10))]

直到这里没有问题。但现在我正在努力通过将 Parameter Listcomb list 相乘来创建一个新列表。所需的输出如下:

[((0, 0, 0), (0, 4, 10)),
 ((0, 0, 0), (1, 4, 10)), 
 ((0, 0, 0), (0, 4, 10)), 
 ((0, 0, 0), (1, 4, 10)),
 ((1, 3, 10), (0, 0, 0)),
 ((1, 3, 10), (0, 0, 0)), 
 ((1, 5, 10), (0, 0, 0)), 
 ((1, 5, 10), (0, 0, 0)),
 ((1, 3, 10), (0, 4, 10)),
 ((1, 3, 10), (1, 4, 10)), 
 ((1, 5, 10), (0, 4, 10)), 
 ((1, 5, 10), (1, 4, 10))]

有人可以帮助我吗?非常感谢!

【问题讨论】:

  • 我已经读了两遍了,我只是不知道你想做什么。我不知道(0, 0, 0) 来自哪里。
  • 参数列表为:[(0, 1), (1, 0), (1, 1)] 当参数列表为 (0,1) 时,参数 A 中的值为零。参数列表为 (1,0) 您在参数 B 中得到零。当参数列表为 (1,0) 时,您没有零,基本上只有梳状矩阵。

标签: python itertools matrix-multiplication cartesian-product


【解决方案1】:

使用列表而不是 numpy 数组来执行此操作并不是最方便的选择。也就是说,你仍然可以用单线做一些事情。

prod = [tuple(i if j != 0 else (0,) * len(i) for i, j in zip(comb_items, bool_items)) 
        for comb_items, bool_items in itertools.product(comb, Parameter_list)]

>>> prod
[((0, 0, 0),  (0, 4, 10)), 
 ((1, 3, 10), (0, 0, 0)), 
 ((1, 3, 10), (0, 4, 10)), 
 ((0, 0, 0),  (1, 4, 10)), 
 ((1, 3, 10), (0, 0, 0)), 
 ((1, 3, 10), (1, 4, 10)), 
 ((0, 0, 0),  (0, 4, 10)), 
 ((1, 5, 10), (0, 0, 0)), 
 ((1, 5, 10), (0, 4, 10)), 
 ((0, 0, 0),  (1, 4, 10)), 
 ((1, 5, 10), (0, 0, 0)), 
 ((1, 5, 10), (1, 4, 10))]

我假设输出的顺序并不重要,Parameter_list 将始终是布尔值。如果需要,这两个东西都可以很容易地改变。

【讨论】:

  • 谢谢,这正是我所需要的。我现在将检查您的代码中 bool_items 的含义!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多