Как сократить добавление к разным спискам в зависимости от результата инструкции if

#python #list #refactoring

#python #Список #рефакторинг

Вопрос:

Есть идеи, можно ли сократить и приукрасить это (дополнительный вариант предполагает вложенные условия if-else и больше списков)?

 some_list, some_other_list = [], []
if condition:
    some_list.append(value)
else:
    some_other_list.append(value)
  

Комментарии:

1. Откуда берется этот вопрос? В чем большая проблема?

2. Похоже, это связано с проверкой кода, а не с реальной проблемой.

Ответ №1:

Троичное выражение:

 (some_list if condition else some_other_list).append(value)
  

Объяснение:

 >>> condition = True
>>> ("A" if condition else "B")
A

>>> condition = False
>>> ("A" if condition else "B")
B
  

Комментарии:

1. Хороший вопрос, поддержанный, и это должен быть принятый ответ, но объяснение сделало бы его еще лучше.

Ответ №2:

Я думаю, вы могли бы использовать ternary.

 some_list.append(value) if condition else some_other_list.append(value)
  

Ответ №3:

С небольшим изменением:

 (condition and some_other_list or some_list).append(value)
  

или:

Для версий Python ниже 2.5 используется подход кортеж / лямбда:

 ((lambda: some_other_list.append(value), lambda: some_list.append(value))[condition]())
  

Объяснение:

 condition = True

some_list = []
some_other_list = []
value = 5

((lambda: some_other_list.append(value), lambda: some_list.append(value))[condition]())

print(some_list)             # 5
print(some_other_list)
  

Комментарии:

1. О первом варианте: что, если condition == True , но some_other_list пусто?

2. @meowgoesthedog предполагая, что это так, пример относится и к первой части.

3. Хорошо, но что теперь, если some_other_list не пусто? condition == True привело бы к some_other_list вместо some_list .