乘以(X,Y)组合的列表

时间:2019-05-14 18:17:12

标签: python combinations itertools multiplying

我试图乘以生成的组合,并从中创建一个新列表。

这是我到目前为止所拥有的:

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

2 个答案:

答案 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] 

详细信息

  1. 此功能包含您要应用的操作。
  2. 简单的可迭代数据(例如list)。请注意,它不必嵌套。
  3. 使用任何可迭代的方法来减少组合对

选项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)。