2016-07-06 1 views
3

Есть ли способ для меня, чтобы иметь дело со случаем, когда список my_list сам не может быть None в список понимание:список понимание, где список сам по себе не является ни один

[x for x in my_list] 

Я попытался это:

[x for x in my_list if my_list is not None else ['1']] 

Однако, похоже, что это не сработает.

+0

ли список 'None' или элемент в списке? –

+1

Спасибо, Моисей, но это другой вопрос, касающийся списка * элементов *, которые являются Ничем. Мой вопрос относится к случаю, когда сам список * None. – morfys

+0

Если вы в порядке с пустым списком, имеющим тот же эффект, что и «Нет», вы можете просто сделать «my_list» или [] ' – spectras

ответ

8

Я думаю, что это делает то, что вы хотите:

>>> my_list = None 
>>> [x for x in my_list] if my_list is not None else ['1'] 
['1'] 

Изменения здесь двигается тройное заявление вне списка понимания.

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

>>> my_list = None 
>>> [x for x in (my_list if my_list is not None else ['1'])] 
['1'] 
+0

. Не' [x для x в my_list] 'неэффективный способ записи' list (my_list) '? – spectras

+1

@spectras Да. Моя интерпретация заключается в том, что 'x for x' является резервным для некоторой другой обработки, которую предлагает OP, но не хочет, чтобы мы фокусировались. Его внимание было сосредоточено на том, чтобы сделать трехстороннее заявление. – John1024

+1

Да, это правильно, John1024. Большое спасибо за ваш ответ. – morfys

2

Ваш код эквивалентен, чтобы сделать копию списка, если он не является ни один другой установки независимо для ["1"]:

whatever = my_list[:] if my_list is not None else ['1'] 

Но у меня есть ощущение, что вы действительно хотите, это может быть один if my_list is None:

if my_list is None: 
    my_list = ['1'] 
1

Другим простым решением является следующее:

[x for x in my_list or ['1']] 

Однако ваш код почти правильно: нужно просто учитывать приоритетов оператора, добавив пару скобок:

[x for x in (my_list if my_list is not None else ['1'])]