列表理解TypeError

时间:2018-03-27 14:45:50

标签: python python-3.x list-comprehension

以下列表理解返回TypeError: 'in <string>' requires string as left operand, not list

new_list = [re.sub(r'in_content_1', r'in_content_2', i) for i in foo_list if re.findall(r'content_name', i, re.M) not in i]

在列表推导中使用re.sub和条件re.findall的正确方法是什么?

2 个答案:

答案 0 :(得分:0)

我认为你的错误在if语句中;实际上

re.findall(r'content_name', i, re.M)

返回&#34; content_name&#34;的列表建立在 i 变量中。您可以更改以下行:

new_list = [re.sub(r'in_content_1', r'in_content_2', i) for i in old_list if 'content_name' not in i]

根据@chrisz的建议,我在 old_list 中更改了名称​​ list

答案 1 :(得分:0)

re.findall()返回所有匹配的list。如果没有找到,它将返回一个空的list,因此将始终为list。因此,if re.finall(...) not in i部分评估为if <list> not in <string>,这就是您看到错误的原因。

您可以使用re.search()做同样的事情。

new_list = [re.sub(r'in_content_1', r'in_content_2', i) for i in foo_list if not re.search(r'content_name', i, re.M)]