2016-07-26 74 views
-1

所以如问题所述,是否可以删除元素并将列表返回到一行?删除一个元素并在一行中分配列表

所以,如果让我们说

a = [1, 3, 2, 4] 
b = a.remove(1) 

这将设置b等于NoneType,所以我在想,如果有一种方法来做到这一点。

+3

这是像'list.remove()'返回'None'这样的就地操作的标准行为。否则会是非标准的行为。你真的绝对100%确定你需要这样做吗? – TigerhawkT3

+0

@ TigerhawkT3我不希望使用删除,只是其他可以复制它的东西。我想这样做,因为我希望能够在lambda中使用remove。 – TheAmateurProgrammer

+1

什么阻止你在'lambda'中使用'remove()'? – TigerhawkT3

回答

2

我想这会工作:

a = [1, 3, 2, 4] 
b = (a.remove(1), a)[1] 

这是假设你想要做的两件事情:通过移除元素

  1. 修改原来的列表,并
  2. 返回的(现在修改)列表。

EDIT

另一种替代方法:

b = a.remove(1) or a 

两者都是相当混乱;我不确定我会在代码中使用。

EDIT 2

既然你提到希望在拉姆达使用这个......你知道,你可以使用一个名为实际功能,您否则将使用lambda任何时候?

E.g.而不是像这样:

map(lambda x: x.remove(1) and x, foo) 

你可以这样做:

def remove_and_return(x): 
    x.remove(1) 
    return x 

map(remove_and_return, foo) 
+0

不用担心这不会用于生产代码,只是试图在1行中编写解决方案。 – TheAmateurProgrammer

+0

啊,如果目标是“代码高尔夫球”,那么我认为'或'变种可能是最短的。 – smarx

2

由于remove回报None,你可以只or a它:

>>> a = [1, 3, 2, 4] 
>>> a.remove(1) or a 
[3, 2, 4] 
+0

其他人首先回答,因此我接受了他的回答,但是ty – TheAmateurProgrammer

0

列表a分配给b

b = a.remove(1) or a 
a is b  # True 

使用b是使用a一样的,如果你得到一个最终的物体,像[b, c, d]这是危险的,因为如果你更新此列表的元素之一,所有的元素将更新了。

对比:

import copy 
b = a.remove(1) or copy.copy(a) 

我觉得这种方式应该是更安全的。

相关问题