如何在进行列表理解时传递空列表

时间:2018-06-13 17:33:59

标签: python list list-comprehension

我必须创建一个包含三个多个列表的所有组合的列表:

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”

1 个答案:

答案 0 :(得分:2)

您可以使用不依赖于显式嵌套for循环的可扩展方法。例如,使用itertools.productfilter

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']