如果匹配字符串,则查找和删除列表元素

fac*_*off 4 list python-3.x

我有一个字符串列表,stringlist = ["elementOne" , "elementTwo" , "elementThree"]我想搜索包含该"Two"字符串的元素并将其从列表中删除,这样我的列表就会变成 stringlist = ["elementOne" , "elementThree"]

我设法打印了它们,但我真的不知道如何从列表中完全删除,del因为我不知道索引或使用stringlist.remove("elementTwo")因为我不知道包含的元素的确切字符串"Two"

到目前为止我的代码:

for x in stringlist:
   if "Two" in x:
       print(x)
Run Code Online (Sandbox Code Playgroud)

Rah*_*pta 9

通常,当我们执行列表理解时,我们会构建一个新列表并为其分配与旧列表相同的名称。虽然这会得到想要的结果,但这不会删除旧的列表。

为了确保引用保持不变,你必须使用这个:

>>> stringlist[:] = [x for x in stringlist if "Two" not in x]
>>> stringlist
['elementOne', 'elementThree']
Run Code Online (Sandbox Code Playgroud)

优点:
由于是赋值给一个列表切片,所以会用相同的Python列表对象替换内容,因此引用保持不变,从而防止在其他地方引用时出现一些错误。

如果您在下面这样做,您将丢失对原始列表的引用。

>>> stringlist = [x for x in stringlist if "Two" not in x]
>>> stringlist
['elementOne', 'elementThree']
Run Code Online (Sandbox Code Playgroud)

因此,为了保留引用,您构建列表对象并为其分配列表切片。

要了解细微差别:

让我们拿一个a1包含一些元素的列表并将列表分配给a2等于a1

>>> a1 = [1,2,3,4]
>>> a2 = a1
Run Code Online (Sandbox Code Playgroud)

方法一:

>>> a1 = [x for x in a1 if x<2]

>>> a1
[1]
>>> a2
[1,2,3,4]
Run Code Online (Sandbox Code Playgroud)

方法2:

>>> a1[:] = [x for x in a1 if x<2]

>>> a1
[1]
>>> a2
[1]
Run Code Online (Sandbox Code Playgroud)

Approach-2 实际上替换了原始a1列表的内容,而 Approach-1 没有。