#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
.