不改变原列表删除元素
假设你有一个列表
>>> m = ['a','b','c']
我想创建一个新的列表 n
,这个列表里包含除了某个特定的项目 m
之外的所有东西(比如说这个项目是 'a'
)。但是,当我使用
>>> m.remove('a')
>>> m
m = ['b', 'c']
时,原来的列表会被改变(也就是说 'a'
从原来的列表中被删除了)。有没有办法可以得到一个新的列表,不包含 'a'
,而不改变原来的列表?我的意思是,m
仍然应该是 [ 'a', 'b', 'c' ]
,而我想得到一个 新的 列表,这个列表应该是 [ 'b', 'c' ]
。
8 个回答
2
我们可以在不使用内置的删除函数,也不创建新的列表变量的情况下来实现这个功能。
代码:
# List m
m = ['a', 'b', 'c']
# Updated list m, without creating new list variable
m = [x for x in m if x != a]
print(m)
输出结果
>>> ['b', 'c']
4
我们可以使用内置的 copy() 函数来复制列表;不过,复制的时候要给这个新复制的列表起个新名字。
m = ['a','b','c']
m_copy=m.copy()
m_copy.remove('a')
print (m)
['a', 'b', 'c']
print(m_copy)
['b', 'c']
8
如果顺序不重要,你可以使用集合(set),而且在集合中删除元素的速度似乎也很快:
list(set(m) - set(['a']))
不过,这样做会把你原来的列表中的重复元素去掉哦。
17
有一个简单的方法可以做到这一点,使用内置的函数:filter。
下面是一个例子:
a = [1, 2, 3, 4]
b = filter(lambda x: x != 3, a)
100
我猜你是想创建一个新的列表,里面不包含某个特定的元素,而不是直接修改原来的列表。一个方法是使用列表推导式:
m = ['a', 'b', 'c']
n = [x for x in m if x != 'a']
n
现在是 m
的一个副本,但里面没有 'a'
这个元素。
当然,另一种方法是先复制列表
m = ['a', 'b', 'c']
n = m[:]
n.remove('a')
如果是通过索引来移除某个值,那就更简单了
n = m[:index] + m[index+1:]