Вставка элемента Python в зависимости от условия - PullRequest
1 голос
/ 15 мая 2019

Я пытаюсь составить список, в котором на основе условия элемент может существовать или не существовать. Например, если это правда, список равен [1, 2, 3], а в противном случае это [1, 3]. В настоящее время я мог бы либо инициализировать список и вызвать .insert или .append элементы по отдельности, либо, альтернативно, я мог бы сделать что-то вроде [1] + ([2] if condition else []) + [3], но это ужасно.

Мне было интересно, существует ли какой-то синтаксис, например, [1, 2 if condition, 3], но я не могу найти ничего подобного. Есть ли подобный синтаксис к этому?

РЕДАКТИРОВАТЬ Мой список не [1, 2, 3]. Я хочу общее решение для любого типа объекта, потому что я даже не работаю с числами (это валидаторы WTForms)

Ответы [ 3 ]

3 голосов
/ 15 мая 2019

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

condition = [True, False, True, True, False]
[i for i in range(len(condition)) if condition[i]]
2 голосов
/ 15 мая 2019

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

elems = ['a', 'b', 'c']
conditions = [True, False, True]

lst = [item for item, condition in zip(elems, conditions) if condition]
print(lst)

, что также можно сделать с помощью itertools.compress:

from itertools import compress

elems = ['a', 'b', 'c']
conditions = [True, False, True]
lst = list(compress(elems, conditions))

или вы создаете свой список и впоследствии удаляете элемент:

lst = ['a', 'b', 'c']
if condition:
    lst.remove('b')
0 голосов
/ 15 мая 2019

Это то, что вы ищете?

[i for i in range(1,4) if i!=2]

ОБНОВЛЕНИЕ: основано на хорошем ответе выше.

Создание условия функцией вместо списка будет обобщать его.

def condition(x):
    if(x==2):
        return False
    else:
        return True

[i for i in range(1,4) if condition(i)] 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...