繁体   English   中英

在python中迭代地乘以两个列表的元素

[英]Iteratively multiply elements of two lists in python

我有两个列表( XY )。 我想先用Y的所有元素缩放X的第一个元素,然后再移动到X的第二个元素,然后再用Y的所有元素缩放。 我怎样才能做到这一点? 理想情况下,我还想在 X 的新元素启动时将其附加到不同的列表( L ),但我不确定这是否可能。

Y = [2, 3, 4, 5]
X = [1, 2, 3, 4]
L = []
for i in range(len(X)):
    for j in range(len(Y)):
        X_scale = X[i] * Y[j]
        L.append(X_scale)

首选结果:

# First element in X
X_scale = [2, 2, 3, 4]
X_scale = [3, 2, 3, 4]
X_scale = [4, 2, 3, 4]
X_scale = [5, 2, 3, 4]

# Second element in X
X_scale = [1, 4, 3, 4]
X_scale = [1, 6, 3, 4]
#etc

这似乎遵循您的模式:

Y = [2, 3, 4, 5]
X = [1, 2, 3, 4]
L = []
for i,x in enumerate(X):
    for y in Y:
        X_scale = X.copy()
        X_scale[i] = x * y
        L.append(X_scale)

for row in L:
    print(row)

输出:

[2, 2, 3, 4]
[3, 2, 3, 4]
[4, 2, 3, 4]
[5, 2, 3, 4]
[1, 4, 3, 4]
[1, 6, 3, 4]
[1, 8, 3, 4]
[1, 10, 3, 4]
[1, 2, 6, 4]
[1, 2, 9, 4]
[1, 2, 12, 4]
[1, 2, 15, 4]
[1, 2, 3, 8]
[1, 2, 3, 12]
[1, 2, 3, 16]
[1, 2, 3, 20]

根据 OP 对索引进行分组的评论:

Y = [2, 3, 4, 5]
X = [1, 2, 3, 4]
L = []
for i,x in enumerate(X):
    L2 = []
    for y in Y:
        X_scale = X.copy()
        X_scale[i] = x * y
        L2.append(X_scale)
    L.append(L2)

for row in L:
    print(row)

输出:

[[2, 2, 3, 4], [3, 2, 3, 4], [4, 2, 3, 4], [5, 2, 3, 4]]
[[1, 4, 3, 4], [1, 6, 3, 4], [1, 8, 3, 4], [1, 10, 3, 4]]
[[1, 2, 6, 4], [1, 2, 9, 4], [1, 2, 12, 4], [1, 2, 15, 4]]
[[1, 2, 3, 8], [1, 2, 3, 12], [1, 2, 3, 16], [1, 2, 3, 20]]

首先,您可以通过直接访问项目来简单地循环,而无需索引。 然后您可以将内部循环转换为理解列表以使其更紧凑:

Y = [2, 3, 4, 5]
X = [1, 2, 3, 4]
L = []
for x_item in X:
    L += [x_item * y_item for y_item in Y]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM