我试图乘以生成的组合,并从中创建一个新列表。
这是我到目前为止所拥有的:
import pandas as pd
import itertools
data1 = [[0.1],[0.2],[0.3],[0.5]]
df = pd.DataFrame(data1, columns = ['weights'])
for x in combinations(df['weights'], 2):
print(x)
>>>
(0.1, 0.2)
(0.1, 0.3)
(0.1, 0.5)
(0.2, 0.3)
(0.2, 0.5)
(0.3, 0.5)
##I want to make a new list that shows the product of each combinations,
## example: for every (x,y) combo, do x*y and make a new list called z
预期的输出将产生一个新列表,其中包括:
0.02
0.03
0.05
0.06
0.1
0.15
答案 0 :(得分:1)
您可以通过简单的列表理解就可以做到这一点,而不必使用// Seek 1 sample forward (about 2-3 seconds)
audioSource.timeSamples = 1;
//Play the audio
audioSource.Play();
:
itertools
输出:
inlist = [(0.1, 0.2),
(0.1, 0.3),
(0.1, 0.5),
(0.2, 0.3),
(0.2, 0.5),
(0.3, 0.5)]
z = [round(elem[0]*elem[1],2) for elem in inlist]
print(z)
但是,如果要使用[0.02, 0.03, 0.05, 0.06, 0.1, 0.15]
,则可以使用starmap
函数:
itertools
输出:
from itertools import starmap
inlist = [(0.1, 0.2),
(0.1, 0.3),
(0.1, 0.5),
(0.2, 0.3),
(0.2, 0.5),
(0.3, 0.5)]
z = list(starmap(lambda i,j: round(i*j,2), inlist))
print(z)
答案 1 :(得分:0)
您可以使用任何可迭代的方式进行这些组合。
如果您不熟悉Python,此答案将尝试阐明一些选项。
给出
一个 reducing 函数mul
和一个可迭代的数据:
def mul(a, b): # 1
"""Return a rounded multiple."""
return round(a * b, 2)
data = [0.1, 0.2, 0.3, 0.5] # 2
代码
准备一个可迭代的-可以循环的线性容器。例子:
选项1-迭代器
iterable = it.combinations(data, 2)
选项2-pandas DataFrame
df = pd.DataFrame(data, columns=["weights"])
iterable = it.combinations(df["weights"], 2)
演示
[mul(x, y) for x, y in iterable] # 3
# [0.02, 0.03, 0.05, 0.06, 0.1, 0.15]
详细信息
list
)。请注意,它不必嵌套。选项3-熊猫作战
或者,一旦您在熊猫中有了数据,就可以坚持使用:
combs = list(it.combinations(data, 2))
df = pd.DataFrame(combs, columns=["a", "b"])
df
# a b
# 0 0.1 0.2
# 1 0.1 0.3
# 2 0.1 0.5
# 3 0.2 0.3
# 4 0.2 0.5
# 5 0.3 0.5
df.prod(axis=1).round(2).tolist()
# [0.02, 0.03, 0.05, 0.06, 0.1, 0.15]
我建议选择纯Python或pandas
(选项1或3)。