我怎样才能摆脱列表中包含确切符号的元素? (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.
我有一个名为“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.