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

时间:2019-01-17 12:11:27

标签: python in-place

我正在使用.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 :(得分:0)

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

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

print (list_remove(l, elem))

  

免责声明:我真的不建议您这样做。但是,这只是我想到的一种方法。

我在单独的语句中写list.remove()print确实没有问题。

答案 1 :(得分:0)

如果您确实想要一个语句而不修改相关列表,则可以尝试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()并在单独的语句中打印时,我真的没看到问题。

     

-杰伊

答案 2 :(得分:0)

如果您确实愿意,可以使用lambda将其包装为单层包装。

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

您是否需要其他两个答案的免责声明的副本?简而言之:这不是一段易读的代码。