python如何检查字符串是不是是字符串列表的元素[重复]

Posted

技术标签:

【中文标题】python如何检查字符串是不是是字符串列表的元素[重复]【英文标题】:python how to check if a string is an element of a list of strings [duplicate]python如何检查字符串是否是字符串列表的元素[重复] 【发布时间】:2017-03-11 10:51:15 【问题描述】:

在python中,如何检查一个字符串是否是字符串列表中的一个元素?

我正在使用的示例数据是:

testData=pd.DataFrame('value':['abc','cde','fgh'])

那为什么下面代码的结果是“False”:

testData['value'][0] in testData['value']

【问题讨论】:

抱歉,数据将存储为包含示例 df 中单个字符串的系列,但您的真实 df 数据真的是每行的字符串列表吗?因为那是根本不同的 @EdChum 的回答很好。为了帮助修复您的原始错误,您只需检查 testData['value'] 的值,因此您的最后一行将是 'testData['value'][0] in testData['value'].values' 并且您将得到一个真 @EdChum,我想示例数据更准确地描述了我的问题。你提到的根本区别可能是我忽略的。 实际上 testData['value'][0] in testData['value'] 我无法解释,不知何故,当标量值为 lhs 时,它能够以某种方式将 Series 数组评估为一个奇怪的标量布尔值 我找到了你上一个问题的答案 【参考方案1】:

您可以使用矢量化的str.contains 来测试每行中是否存在/包含字符串:

In [262]:
testData['value'].str.contains(testData['value'][0])

Out[262]:
0     True
1    False
2    False
Name: value, dtype: bool

如果您想知道它是否出现在任何行中,请使用any

In [264]:
testData['value'].str.contains(testData['value'][0]).any()

Out[264]:
True

可以回答您的最后一个问题:

In [270]:
testData['value'][0] in testData['value']

Out[270]:
False

这是因为实现了pd.Series.__contains__

def __contains__(self, key):
    """True if the key is in the info axis"""
    return key in self._info_axis

如果我们看一下 _info_axis 的实际含义:

In [269]:
testData['value']._info_axis

Out[269]:
RangeIndex(start=0, stop=3, step=1)

然后我们可以看到当我们在testData['value'] 中执行'abc' 时,我们真的在测试'abc' 是否真的在索引中,这就是它返回False 的原因

例子:

In [271]:
testData=pd.DataFrame('value':['abc','cde','fgh'], index=[0, 'turkey',2])
testData

Out[271]:
       value
0        abc
turkey   cde
2        fgh

In [272]:
'turkey' in testData['value']

Out[272]:
True

我们可以看到它现在返回 True,因为我们正在测试索引中是否存在 'turkey'

【讨论】:

以上是关于python如何检查字符串是不是是字符串列表的元素[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何检查字符串是不是包含列表的任何元素并获取元素的值?

python3检查列表、元组、字符串中的重复元素

Python如何检查列表中的项目是不是为浮点数,如果是,将其更改为字符串? [复制]

如何检查字符串是不是在列表中,使用每个项目上的函数(python3)[重复]

Python:如何判断列表中的元素是否包含某个数字?

Python检查列表项是不是(不)包含任何其他列表项