0
if emp in like_list[j]:

TypeError:强制转换为 Unicode:需要字符串或缓冲区,找到列表

emp和都是like_list包含字符串的列表。

4

2 回答 2

2

因为emplike_list都是列表,所以您实际上是在列表中查找列表。

如果您尝试匹配 list 中的任何元素emp,则可以像这样遍历列表:

for element in emp:
    if element in like_list:
        --do something--
    else:
        --do something else--

或者,如果like_list是列表列表,则您的if陈述将起作用。

于 2012-08-31T18:04:00.367 回答
0

如果两者emp都是like_list字符串列表,则表达式emp in like_list[j]将检查列表是否是单个字符串的成员。当我用下面的代码测试它时,我得到了一点不同TypeError

>>> emp = ["foo", "bar"]
>>> like_list = ["baz", "quux"]
>>> if emp in like_list[0]:
...     print "found"
... 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'in <string>' requires string as left operand, not list

这表示您不能测试非字符串在字符串中的成员资格。我认为解决这个问题会很容易,但并不完全清楚你想要做什么。

如果要检查字符串like_list[j]中是否有其中一个字符串emp作为子字符串,请使用:

if any(s in like_list[j] for s in emp):

相反,如果您想查看是否like_list[j]等于 中的字符串之一emp,则需要反转in表达式:

if like_list[j] in emp:
于 2012-08-31T19:49:29.310 回答