Как создать список условно? - PullRequest
2 голосов
/ 24 января 2020

У меня следующая проблема. Я хотел бы сформировать список a условно.

Допустим, у меня есть переменная add_string, а если она True, то

a = ["a","b","Added String","c"]

Остальное

a = ["a","b","c"]

Какой лучший способ сделать это? Я могу сделать это следующим образом

a = ["a","b","c"]
if add_string:
  a.insert(2,"Added String")

Но это не идеально, поскольку список a может измениться в будущем, и мне придется изменить индекс в функции вставки. Также у меня есть условие - эта добавленная строка всегда должна следовать после "b". Другое решение состоит в том, чтобы искать «b» в списке и затем вставлять после этого, но это добавляет сложности, и это уродливо.

В идеале я думал, что это должно быть что-то вроде

a = ["a","b",if add_string then "Added String","c"]

Ответы [ 3 ]

3 голосов
/ 24 января 2020
a = ["a","b"] + (["Added String"] if add_string else []) + ["c"]
3 голосов
/ 24 января 2020

Если вы знаете все значения при создании, вы можете сделать что-то вроде этого:

add_string = True
a = ['a', 'b'] + (['Added String'] if add_string else []) + ['c']

Вывод:

['a', 'b', 'Added String', 'c']

Если вы не знаете значения в a, вы можете использовать index, чтобы найти местоположение 'b' в a, и вставить строку после этого:

a = ["a","b","c"]
add_string = True
if add_string:
    a.insert(a.index("b")+1,"Added String")
print(a)

Вывод:

['a', 'b', 'Added String', 'c']
1 голос
/ 24 января 2020

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

add_string = False  # Could be True
unfiltered_list = ["a","b","Added String" if add_string else None,"c"]
a = [x for x in unfiltered_list if x is not None]
print(a)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...