【发布时间】:2020-08-21 21:23:59
【问题描述】:
我试图弄清楚如何创建一个包含两个列表的函数,然后返回一个列表,其中包含通过从每个索引的列表之一中选择一个元素来创建的这些列表的所有可能组合。我不认为我描述得很好,但我正在寻找的是:
输入: ['a','b'], ['c','d']
输出: ['ab', 'ad', 'cb', 'cd']
我在这里做了一个半成功的函数:
def mix_list(lst1, lst2):
res = []
k = max(len(lst1), len(lst2))
ref = itertools.product(range(2), repeat=k)
for comb in list(ref):
temp = [None] * k
for i, e in enumerate(comb):
if e == 0:
try:
temp[i] = lst1[i]
except IndexError:
temp[i] = lst2[i]
elif e == 1:
try:
temp[i] = lst2[i]
except IndexError:
temp[i] = lst1[i]
res.append(temp)
return [''.join(i) for i in set(map(tuple, res))]
我的第一个想法是 itertools 会有一些功能来完成这个,但我找不到任何东西。除此之外,我在这里进行了一些谷歌搜索和搜索,但我无法找到能够更快或更简单地完成我正在寻找的东西的东西。
有没有更好的方法来实现这一点,或者可能有一个库已经完成了这个功能?
【问题讨论】:
-
为什么是
'ab'?它使用第一个列表中的两个索引和第二个列表中的零索引。 -
它从每个索引的任一列表中选择一个元素,而不是每个列表。所以对于每一个输出,output[0]可以是input_1[0]或者input2[0],而output[1]可以是input_1[1]或者input_2[1]。这样有意义吗?
-
是的,现在说得通了
标签: python list iteration generator