python - 用列表理解替换字符串时出现 TypeError
问题描述
我的代码很简单:
['found' if 'some_string' in word else word for word in wordlist]
但它返回
TypeError
Traceback (most recent call last)
<ipython-input-108-990cad51d935> in <module>()
----> 1 [word for word in wordlist if 'some_string' in word ]
<ipython-input-108-990cad51d935> in <listcomp>(.0)
----> 1 [word for word in wordlist if 'some_string' in word ]
TypeError: argument of type 'NoneType' is not iterable
(我试过用几种方法重新排列它,但都无济于事。)
相比之下,这段代码完全符合预期:
for word in wordlist:
if 'some_string' in word:
print ('found')
else:
print(word)
我想要的只是用'found'替换包含'some_string'的任何字符串。
进一步的上下文:wordlist 是 Jupyter 笔记本中 Pandas 数据框列的值。
wordlist = list(df.sender.values)
type(wordlist)
list
解决方案
您可以通过简单地使用“str()”来与从列表中恢复的值进行比较来解决这个问题。
下面是一个例子来证明这一点:
wordlist = ['some_string', 'sometext', 'some_string', 'randomtext', None]
['found' if 'some_string' in str(word) else word for word in wordlist]
输出是
['found', 'sometext', 'found', 'randomtext', None]
(要产生错误,在理解中用 word 替换 str(word)。)
推荐阅读
- javascript - 如果我在按钮内添加跨度以添加字体真棒图标,则下拉 onclick 功能不起作用
- flutter - 我可以将 PageController 存储在 Provider 中吗
- redis - 在 Redis 中,如何保证在多客户端环境中从列表中获取 N 个项目?
- flutter - 如何根据值更改Flutter中的边框颜色?
- sql - sql临时表和while?
- excel - COUNTIF 标题行单元格长度小于一个值并且范围可能包含 #N/A
- wordpress - Wordpress 重写 url /?
- python - Pandas groupby、过滤和聚合
- android - 为什么 Android Manifast 找不到我的活动?(使用带有应用程序后缀的构建变体时)
- server - 我可以在物理主机上隔离虚拟机吗?