删除没有变异的列表元素

时间:2014-07-28 21:04:57

标签: python list

假设你有一个清单

>>> m = ['a','b','c']

我想制作一个新列表n,除了m中的给定项目(例如项目'a')之外,其他所有内容都包含在内。但是,当我使用

>>> m.remove('a')
>>> m
m = ['b', 'c']

原始列表发生了变异(从原始列表中删除了值'a')。有没有办法获得一个新的列表sans - 'a'而不改变原始?我的意思是m应该仍然是[ 'a', 'b', 'c' ],我会得到一个新的列表,该列表必须是[ 'b', 'c' ]

6 个答案:

答案 0 :(得分:22)

我假设您的意思是要创建一个没有给定元素的新列表,而不是更改原始列表。一种方法是使用列表理解:

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:]

答案 1 :(得分:2)

如果顺序不重要,则可以使用set(此外,删除set似乎很快):

list(set(m) - set(['a']))

答案 2 :(得分:1)

您可以创建一个新列表,而不会使用列表理解的违规元素。这将保留原始列表的值。

l = ['a','b','c']
[s for s in l if s!='a']

答案 3 :(得分:1)

列表理解的另一种方法是numpy:

>>> import numpy
>>> a = [1, 2, 3, 4]
>>> list(numpy.remove(a,a.index(3)))
[1, 2, 4]

答案 4 :(得分:0)

有一个简单的方法可以使用内置函数:filter。

以下是斧头示例:

a = [1, 2, 3, 4]
b = filter(lambda x: x != 3,a)

答案 5 :(得分:0)

我们可以在不使用内置删除函数的情况下做到这一点,也不需要创建新的列表变量

代码:

# 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']