簡體   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