您可以采取product将最后两个列表替换为range
相同长度的对象,然后根据项目的最后一个字符选择最后两个列表中的一个LISTB
:
from itertools import product
def func(lsta, lstb, lstc, lstd):
for b, a, i in product(lstb, lsta, range(len(lstc))):
yield a, b, lstc[i] if b.endswith('C') else lstd[i]
for tup in func(LISTA, LISTB, LISTC, LISTD):
print(tup)
('A1', 'B1_C', 'C1')
('A1', 'B1_C', 'C2')
('A2', 'B1_C', 'C1')
('A2', 'B1_C', 'C2')
('A1', 'B2_D', 'D1')
('A1', 'B2_D', 'D2')
('A2', 'B2_D', 'D1')
('A2', 'B2_D', 'D2')