Удалить элемент из списка и распечатать новый список в том же заявлении - PullRequest
0 голосов
/ 17 января 2019

Я использую функцию .remove(), чтобы удалить элемент из списка, а затем хочу напрямую использовать этот новый список в другой функции, например, функция print(). Когда я делаю это, я получаю следующее:

print([1, 2, 3])
# [1, 2, 3]

print([1, 2, 3].remove(2))
# None

Так что, если я хочу напрямую использовать другую функцию (например, print()) после функции Inplace, например, .remove(), то, как это ни парадоксально, я могу сделать это только так:

print([1, 2, 3])
# [1, 2, 3]

x = [1, 2, 3]
x.remove(2)
print(x)
# [1, 3]

Есть ли лучший способ сделать это вместо написания этого дополнительного исходного кода?

Очевидно, что та же проблема применима ко всем функциям Inplace, как и атрибуты других функций.

Ответы [ 3 ]

0 голосов
/ 17 января 2019

Если вы действительно хотите один оператор без изменения рассматриваемого списка, вы можете попробовать my_list[:my_list.index(value)]+my_list[my_list.index(value)+1:]. Это имеет недостатки

  • Вы рассчитываете my_list.index(value) дважды (не обязательно 3,8+, см. PEP572 )
  • Вы нарезаете и добавляете, что намного больше, чем просто удаление
  • на самом деле (почти) не так ясно, как my_list.remove(val)

И


Отказ от ответственности : Я действительно не рекомендую вам это делать. Но это просто метод, который мне пришёл в голову.

Я действительно не вижу проблемы в написании list.remove () и печати в отдельных выражениях.

- Jay

0 голосов
/ 17 января 2019

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

print( (lambda x,y:x if x.remove(y) is None else None) ([1, 2, 3], 2) )

Вам нужна копия Отказ от ответственности из двух других ответов? Короче говоря, это не очень читаемый кусок кода.

0 голосов
/ 17 января 2019

Вы можете создать функцию-обертку для удаления списка и вызывать эту функцию вместо прямого вызова list.remove.

def list_remove(l, elem):
    l.remove(elem)
    return l

print (list_remove(l, elem))

Отказ от ответственности: Я действительно не рекомендую вам это делать. Но это просто метод, который мне пришёл в голову.

Я действительно не вижу проблемы в написании list.remove() и print в отдельных выражениях.

...