【问题标题】:Difference between .find() and 'in' operator in pythonpython中.find()和'in'运算符的区别
【发布时间】:2019-11-18 00:23:23
【问题描述】:

我正在使用名为 filteredDS

的 pandas 开发 Dataframe

目标:

搜索所有question列包含'King'字的数据。

当我通过 in 运算符添加列 king_quest 时,如下所示:

filteredDS['king_quest'] = filteredDS.question.apply(lambda x: x if ' King ' in x else None).reset_index(drop = True)
filtered_king_df = filteredDS[~filteredDS.king_quest.isnull()].reset_index()
print(filtered_king_df)

我得到大约 2000 行的数据框, 当我通过 .find() 函数添加它时:

filteredDS['king_quest'] = filteredDS.question.apply(lambda x: x if x.find('king') else None).reset_index(drop = True)
filtered_king_df = filteredDS[~filteredDS.king_quest.isnull()].reset_index()
print(filtered_king_df)

我得到大约 3000 行的数据框。

注意:在这两种情况下,question 列中的每一行都有 'king' 单词。

你能说说为什么会这样吗?

【问题讨论】:

    标签: python pandas find in-operator


    【解决方案1】:

    这里可能有多个问题。

    1. 您的发现是在语句中寻找不同的值。 'King'(空格,一个首字母大写),另一个只有“king”。

    2. x.find('king') 返回第一个匹配的索引,否则返回 -1。如果你想用这个来检查,你可能应该检查x.find('king') > 0,但这不像'king' in x那么直观

    【讨论】:

    • 是的,你说得对,我写了lambda x: x if x.find('king')!=-1 else None 然后它给出的结果与 'in' 运算符给出的结果完全相同。谢谢)
    【解决方案2】:

    in 运算符

    'in' 运算符用于检查一个值是否存在于一个序列中。如果找到指定序列中的变量,则评估为 true,否则为 false。

    # Python program to illustrate 
    # Finding common member in list  
    # using 'in' operator 
    list1=[1,2,3,4,5] 
    list2=[6,7,8,9] 
    for item in list1: 
        if item in list2: 
            print("found")       
    else: 
        print("not found") 
    
    

    find() 方法 如果在给定字符串中找到子字符串,则 find() 方法返回子字符串的最低索引。如果未找到,则返回 -1。

    word = 'the tea looks good, this tea is for me;Thank you'
    
    # returns first occurrence of Substring
    result = word.find('tea')
    print("Substring 'tea' found at index:", result)
    
    

    【讨论】:

      【解决方案3】:

      下面是对 find() 方法更全面的解释:

      • 它查找子字符串并返回子字符串第一次出现的索引
      • 它不会为包含不存在子字符串的参数生成错误 - 如果子字符串不存在,则返回 -1
      • 它仅适用于字符串

      它有两个参数变体,find(string, position),其中 string 是您的字符串,而 position 指定开始搜索的索引。如果不指定位置,则 find() 将从字符串的开头开始。

      它还有一个三参数变量,前两个参数和双参数变量一样,第三个参数是搜索时不考虑第一个索引的位置。你可以认为它有这个签名:find(string,starting_position,ending_position) 并且不包括ending_position

      我之前没用过filteredDS,对它不熟悉,希望下面的这个例子可以帮助你想出一种方法来将find()方法应用到你的案例中。此代码打印字符串“text”中所有出现的单词“it”的索引。

      text = " Lorem Ipsum 只是印刷和排版行业的虚拟文本。自 1500 年代以来,Lorem Ipsum 一直是行业的标准虚拟文本。它不仅存在了五个世纪,而且还经历了电子排版的飞跃,剩下的基本上没有变化。它在 1960 年代随着包含 Lorem Ipsum 段落的 Letraset 表的发布而流行起来,最近又随着桌面出版软件而流行起来。它被广泛使用。”

      index = text.find("it")
      while index != -1:
          print(index)
          index = text.find("it", index+1)
      

      【讨论】:

        猜你喜欢
        • 2022-10-18
        • 1970-01-01
        • 2021-12-18
        • 2019-09-25
        • 1970-01-01
        • 2011-08-20
        • 2013-07-06
        • 1970-01-01
        相关资源
        最近更新 更多