【问题标题】:With python, how do I find out if a string contains anything characters besides characters in another list使用python,我如何找出一个字符串是否包含除另一个列表中的字符之外的任何字符
【发布时间】:2021-06-07 19:47:40
【问题描述】:

我有一个字符列表:

example_list = ['a','b','c','1','2','3']

我正在迭代地遍历 pandas 数据框中的一列,并评估某些内容是否“关闭”。让我们调用我正在运行的列/列表值。我正在查看的值的一个示例:

value1 = ['a12']
value2 = ['d88']
value3 = ['b33']

值 1 和 3 是正确的,因为它们仅由 example_list 中的元素组成。我希望将 value2 标记为 False,并将值 1 和 3 标记为 True。

我尝试过的:

not any(x in example_list for x in value)

这似乎总是返回 True。使用 all() 方法将查看是否所有内容都在其中,并且 any() 将查找其中是否有任何内容,是吗?我正在寻找一种“除了 x 之外的任何东西”的方法。我是python新手,所以我认为这是“我不知道,我不知道什么”的情况,有人有什么建议吗?谢谢!

【问题讨论】:

  • 我认为你需要all 而不是any
  • 问题是您创建了列表(对于值),因此您检查给定字符串“a12”是否在每次都失败的 example_list 中。所以 negatedt any 将返回 true。我认为您想将列表更改为字符串(删除括号)
  • 你想错了。用文字来想:对于目标字符串中的所有字符,列表中的字符是? ok = all(c in example_list for c in value1)

标签: python regex pandas contains


【解决方案1】:

您的values 是字符串列表。这意味着,在每种情况下,您都要检查完整字符串(如“a12”)是否包含在单个字符的列表中=>这永远不会是真的。

如果你不想改变values,你可以索引第一个字符串,然后遍历这个字符串的字母:

all(x in example_list for x in value1[0])  # => True
all(x in example_list for x in value2[0])  # => False
all(x in example_list for x in value3[0])  # => True

【讨论】:

    【解决方案2】:

    如果我理解正确的话,每一行都包含一个包含单个元素的列表:

    df = pd.DataFrame({'value': [['a12'], ['d88'], ['b33']]})
    example_list = ['a','b','c','1','2','3']
    
    print(df)
    
        value
    0   [a12]
    1   [d88]
    2   [b33]
    

    然后你可以使用列表推导:

    df['check'] = [True if set(x[0]).issubset(set(example_list)) else False for x in df['value']]
    

    我们正在检查第一个元素的集合(在您的情况下是单个值)是否是 example_list 集合的子集并返回 True。不满足条件时返回 False。

    输出:

        value   check
    0   [a12]    True
    1   [d88]   False
    2   [b33]    True
    

    让我知道这是否不是您的意思或提供一些简单的输入作为数据框。

    【讨论】:

      【解决方案3】:
      s = pd.Series(["a12", "d88", "b33"])
      l = "".join(example_list)
      
      >>> s
      0    a12
      1    d88
      2    b33
      dtype: object
      
      >>> l
      'abc123'
      
      >>> s.apply(set(l).issuperset)
      0     True
      1    False
      2     True
      dtype: bool
      

      【讨论】:

        【解决方案4】:

        这是您开始使用的可行解决方案:

        example_list = ['a', 'b', 'c', '1', '2', '3']
        
        value1 = ['a12']
        value2 = ['d87']
        value3 = ['b33']
        
        result=all(list(map(lambda x : True if x in example_list else False, *value2)))
        print(result)
        

        *value2 与列表内容一起使用,因此它是一个字符串 *all 用于测试每个字符是否属于example_list

        【讨论】:

          猜你喜欢
          • 2020-08-09
          • 2019-07-20
          • 2014-10-08
          • 2021-05-06
          • 1970-01-01
          • 2023-03-31
          • 1970-01-01
          • 2011-02-05
          相关资源
          最近更新 更多