You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

列表推导式报错:TypeError: 'in <string>'需左操作数为字符串而非列表

解决TypeError: 'in ' requires string as left operand, not list的问题

嘿,这个错误的根源是你的代码里有两处逻辑问题,我来一步步帮你修正:

错误原因解析

你写的列表推导式里:

[1 if re.search(top_words_list) in i else 0 for i in amazon['reviewer_summary']]
  1. re.search(top_words_list)不符合要求:re.search()的第一个参数必须是正则表达式字符串,不能直接传列表top_words_list。
  2. 就算你修正了re.search的参数,re.search(...) in i的逻辑也不对——in运算符左边需要是字符串,而re.search()返回的是匹配对象(或None),这就触发了你看到的类型错误。

几种可行的解决方案

方案1:不用正则,直接检查单词是否存在(简单快速)

用any()函数遍历top_words_list,只要列表里有任意一个单词出现在当前的reviewer_summary字符串中,就标记为1:

top_words_list = ['great', 'love', 'good', 'story', 'loved', 'excellent', 'series', 'best', 'one']
amazon['has_top_word'] = [1 if any(word in summary for word in top_words_list) else 0 for summary in amazon['reviewer_summary']]

方案2:用正则匹配完整单词(避免部分匹配)

如果你想避免“good”匹配到“goodbye”这类情况,可以用正则的单词边界\b,把列表转成可选的正则模式:

import re

top_words_list = ['great', 'love', 'good', 'story', 'loved', 'excellent', 'series', 'best', 'one']
# 构建正则模式:匹配列表中任意一个完整单词
pattern = r'\b(' + '|'.join(top_words_list) + r')\b'
amazon['has_top_word'] = [1 if re.search(pattern, summary) else 0 for summary in amazon['reviewer_summary']]

方案3:用Pandas向量化操作(最高效)

如果你的数据量比较大,推荐用Pandas内置的str.contains()方法,这是向量化操作,比列表推导式快很多:

import re

top_words_list = ['great', 'love', 'good', 'story', 'loved', 'excellent', 'series', 'best', 'one']
pattern = r'\b(' + '|'.join(top_words_list) + r')\b'
amazon['has_top_word'] = amazon['reviewer_summary'].str.contains(pattern, regex=True).astype(int)

这里str.contains()会返回布尔值(True/False),用astype(int)可以把它转成1/0。

内容的提问来源于stack exchange,提问作者Jake Park

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:13:18