假设你有一个清单
>>> m = ['a','b','c']
我想制作一个新列表n
,除了m
中的给定项目(例如项目'a'
)之外,其他所有内容都包含在内。但是,当我使用
>>> m.remove('a')
>>> m
m = ['b', 'c']
原始列表发生了变异(从原始列表中删除了值'a'
)。有没有办法获得一个新的列表sans - 'a'
而不改变原始?我的意思是m
应该仍然是[ 'a', 'b', 'c' ]
,我会得到一个新的列表,该列表必须是[ 'b', 'c' ]
。
答案 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']