从列表中删除元素并在同一语句中打印新列表

Remove element from list and print new list in the same statement

我正在使用 .remove() 函数从列表中删除一个元素,然后我想将这个新列表直接用于另一个函数,例如print() 函数。当我这样做时,我得到以下信息:

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

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

因此,如果我想在 .remove() 等 Inplace 函数之后直接使用另一个函数(例如 print()),那么矛盾的是我只能这样做:

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

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

除了编写这个额外的源代码之外,还有什么更好的方法可以做到这一点吗?

显然,同样的问题适用于所有 Inplace 函数,我猜是其他函数的属性。

您可以为列表删除创建包装函数并调用该函数,而不是直接调用 list.remove。

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

print (list_remove(l, elem))

Disclaimer: I really don't recommend you to do this. But, this is just a method that came to my mind.

我真的不认为在单独的语句中写 list.remove()print 有什么问题。

如果你真的想要 one 语句而不修改有问题的列表,你可以尝试 my_list[:my_list.index(value)]+my_list[my_list.index(value)+1:]。这有缺点

  • 你计算 my_list.index(value) 两次(3.8+ 不需要,见 PEP572
  • 你切片并添加,这不仅仅是删除
  • 它不像my_list.remove(val)
  • 那样(接近)清晰

而且,


Disclaimer: I really don't recommend you to do this. But, this is just a method that came to my mind.

I really don't see a problem in writing list.remove() and print in separate statements.

--Jay

如果你真的想要,你可以使用 lambda 将它包装成一个单行代码:

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

您需要一份其他两个答案的免责声明吗?简而言之:它不是一段可读性很强的代码。