我必须创建一个包含三个多个列表的所有组合的列表:
a = ['1','2']
b = ['3','4']
c = ['5']
name = []
delimiter = '_'
name = [i + delimiter + j + delimiter + k for i in a for j in b if b for k in c]
print (name)
['1_3_5', '1_4_5', '2_3_5', '2_4_5']
我的问题是,在某些情况下,列表c是空的。
c = []
print (name)
[]
有没有办法通过改变列表理解来阻止它作为空列表返回,而不删除“k in c”?
答案 0 :(得分:2)
您可以使用不依赖于显式嵌套for
循环的可扩展方法。例如,使用itertools.product
和filter
:
from itertools import product
a = ['1','2']
b = ['3','4']
c = ['5']
res = ['_'.join(i) for i in product(*filter(None, (a, b, c)))]
# ['1_3_5', '1_4_5', '2_3_5', '2_4_5']
空c
:
c = []
res = ['_'.join(i) for i in product(*filter(None, (a, b, c)))]
# ['1_3', '1_4', '2_3', '2_4']