python 删除列表元素而不改变

67up9zun  于 2023-01-16  发布在  Python
关注(0)|答案(8)|浏览(335)

假设您有一个列表

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

我想创建一个新的列表n,它包含m中除给定项之外的所有内容(例如项'a')。

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

原来的列表被改变了(值'a'从原来的列表中被移除)。有没有办法在不改变原来的列表的情况下得到一个新的列表sans-'a'?所以我的意思是m应该仍然是[ 'a', 'b', 'c' ],我将得到一个 new 列表,它必须是[ 'b', 'c' ]

jum4pzuy

jum4pzuy1#

我假设你想创建一个没有给定元素的新列表,而不是改变原来的列表。一种方法是使用列表解析:

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

jpfvwuh42#

有一种简单的方法可以做到这一点,使用内置函数:filter。
下面是ax示例:

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

sqyvllje3#

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

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

这将从原始列表中移除重复的元素

0wi1tuuw

0wi1tuuw4#

我们可以通过list的内置copy()函数来实现;但是,应该为副本指定一个新名称;

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

print (m)

[“a”、“b”、“c”]

print(m_copy)

〔“乙”、“丙”〕

kyks70gy

kyks70gy5#

你可以用列表解析创建一个没有违规元素的新列表。这将保留原始列表的值。

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

vm0i2vca6#

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

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

nmpmafwu7#

我们可以做到这一点,而不使用内置删除函数,也不创建新的列表变量
代码:

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

kgsdhlau8#

这个问题很有用,因为我有时会在整个脚本中使用一个列表,但我需要在某个步骤对列表元素的子集应用逻辑。在这种情况下,我发现使用同一个列表但只排除单个步骤所需的元素是很有用的,而不需要创建一个具有不同名称的全新列表。为此,您可以使用:
1.列表理解:假设您有l=['a','b','c']来排除B,则可以有[x for x in l if x!='b']

  1. set [仅当顺序不重要时]:list(set(l) - set(['b'])),请注意,这里您传递的是'b'作为列表['b']

相关问题