一種簡單的方式來做到這一點是使用切片:
c = []
for i in range(len(b)):
c.append(sum(x*y for x, y in zip(a, b[i:] + b[:i])))
採樣運行:
In [1]: a = [1, 2, 3]
...: b = [4, 5, 6]
...:
In [2]: c = []
...: for i in range(len(b)):
...: c.append(sum(x*y for x, y in zip(a, b[i:] + b[:i])))
...:
In [3]: c
Out[3]: [32, 29, 29]
在你的情況,你可能需要通過x[1]*y[1]
更換x*y
。
但是,這會在每次迭代時創建一個b
的副本。你可能想簡單地使用循環:
import itertools as it
c = []
for k in range(len(b)):
res = 0
for i, j in enumerate(it.chain(range(k, len(b)), range(k))):
res += a[i]*b[j]
c.append(res)
或者你可以使用一個collections.deque
存儲指數:
from collections import deque
c = []
b_indices = deque(range(len(b)))
for _ in range(len(a)):
c.append(sum(x*b[j] for x, j in zip(a, b_indices))
b_indices.rotate(-1)
它可能是有意義的使用'集合.deque'代表'b'代替列表 – Pynchia