我怎样才能摆脱列表中包含确切符号的元素? (python)

How can I get rid of elements containing exact symbols in the list? (python)

我有一个名为“list”的列表,它包含大约 20K 个字符串,我需要从中删除包含“text”: "" 的元素。

我正在像这样创建一个新的清理列表

clean_list = []

for i in list:
  if '"text": ""' in i == False:
    clean_list.append(i)
  print(i)

但是元素没有追加并且 clean_list 是空的。 可能是什么问题? smth循环错了。

还有什么方法可以删除列表中的某些元素?

首先,你不应该像list这样用受保护的关键字命名变量。

对于您的用例,您可以使用列表理解:

clean_list = [string for string in list if '"text": ""' not in string]

这不起作用的原因是运算符没有按照您认为的方式进行关联:

>>> '"text": ""' in "foo" == False
False
>>> ('"text": ""' in "foo") == False
True

使用in ... == False在任何情况下都是awkward/un-Pythonic;最好做更自然的 not in ...:

>>> '"text": ""' not in "foo"
True
if '"text": ""' in i == False:

不要使用该语法。 i == False 是不必要的(而且看起来很尴尬),在这种特定情况下,它实际上会导致您遇到的问题。

改为使用此语法:

if '"text": ""' not in i:

如果您想知道为什么会发生这种情况,请继续阅读。

此问题是由于 运算符链接

当您的表达式包含两个(或更多)运算符时,例如:

a < b < c

Python 将该表达式视为您键入的内容:

a < b and b < c

在您的示例中,in== 都是运算符,因此 Python 将您的表达式视为您输入了以下内容:

if '"text": ""' in i and i == False:

第一部分是正确的,但第二部分不是。所以整个表达式是错误的。

您不应该在 Python 中使用 built-in 命名为变量名。

s = 'This is a sample "text": "" and it should not have it.'
if r'"text": ""' in s:
    print("Found.")

The output will be `Found.`

现在,借助于此,您可以使用:

clean_list = [i for i in list if r'"text": ""' not in i]
# This just creates a new list if an item `i` is found not having the pattern '"text": ""'. The r' refers to raw strings and can be helpful when using a lot of symbols and characters.