2016-11-18 4 views
4

Я хочу сделать что-то вроде этого:Условные термины в Python инициализации списка

a = some_funct() 
b = [ 1, a if a is not None ] 

Список б должен быть один элемент длиной, если его нет, и длинные два элемента, если не является None. Возможно ли это в Python или мне нужно использовать отдельную, если проверить, а затем добавить()?

+2

Как насчет 'b = [1]; если a не является None: b.append (a) '? – Psidom

+0

В качестве альтернативы, 'b = [x для x в (1, a), если x не является None]' ... но check-then-append будет более читаемым. –

+0

b = [1]; a и b.append (a) ??? – Skycc

ответ

3

Не выглядеть лучше, но вы могли бы сделать

b = [1] + ([a] if a is not None else []) 

Конечно, было бы лучше, чтобы проверить, как это повышает читаемость кода.

+0

Мне это нравится, потому что он не вызывает list.append и поддерживает списки, содержащие любое значение, включая None. –

1

Вы можете сделать это, используя список понимание

b = [x for x in (1, a) if x is not None] 

Кортеж (1, a) является полный набор, б будет список всех элементов в этом общем наборе, которые не являются None

2
a = some_funct() 
b = [ 1, a ] if a is not None else [1] 
1

I слишком поздно в этой игре, но у меня был такой же вопрос, и, увидев другие ответы, я придумал это решение, используя sets:

list({1, a or 1}) 
+0

Умное решение для инициализации списков максимум двух элементов. – haridsv