Передача только заполненных списков в цикл for - PullRequest
0 голосов
/ 24 августа 2018

У меня есть четыре списка:

list1=[1,2,3,4,5,6,7,8,9]
list2=['a','b','c','d','e','f']
list3=['one','two','three','four','five','six','seven']
list4=[]

Я пытаюсь запустить следующий код, чтобы сгенерировать все возможные продукты из содержимого этих списков:

for i in itertools.product(list1,list2,list3,list4):
    print(i)

Это прекрасно работает, когдавходными данными являются только list1, list2 и list3.Однако предоставление пустого списка также приводит к пустому выводу.Это проблематично, поскольку один из этих четырех списков всегда будет пустым, и я не могу сказать, каким он будет.

Есть ли способ передачи только имен заполненных списков в цикл for?Я не уверен, куда обращаться с выражениями-генераторами, что, я думаю, является вероятным ответом здесь.

1 Ответ

0 голосов
/ 24 августа 2018

Используйте filter, чтобы удалить пустой список.Вы можете использовать filter(bool, (list1,list2,list3,list4)) или filter(None, (list1,list2,list3,list4)) для фильтрации списка

for i in itertools.product(*filter(bool, (list1,list2,list3,list4))):
    print(i)
...