【问题标题】:Simple Way to Check Each List Element for Match with Particular String in Python在 Python 中检查每个列表元素是否与特定字符串匹配的简单方法
【发布时间】:2021-08-19 17:38:33
【问题描述】:

我在 Python 中有以下列表:

my_list = ["yes", "yes", "no", "yes", "no", "yes"]

我想返回一个逻辑值列表,如果 my_list 中的相应列表元素等于“yes”,则返回 True,如果 my_list 中的相应列表元素等于“no”,则返回 False

期望的输出:

my_list_logical = [True, True, False, True, False, True]

我通常在 R 中编程,而在 R 中,这可以通过以下代码轻松完成:

my_list == "yes"

我在this thread 中找到了一个 Python 解决方案。但是,这个线程的解决方案非常复杂,我不敢相信这在 Python 中比在 R 中复杂得多。

有没有一种简单的方法可以根据我的输入向量返回逻辑列表?

【问题讨论】:

  • 删除了 R-tag,因为这是一个 python 问题..
  • my_list_logical = [x == "yes" for x in my_list]
  • @Wimpel 好的,谢谢!我想我会添加它,因为我正在将 Python 与 R 进行比较,但删除它很好。
  • my_list_logical = map(lambda x: x == "yes", my_list)
  • 非常感谢大家的快速回复,以及众多非常好的解决方案!

标签: python list logical-operators


【解决方案1】:

您可以使用列表推导:

my_list = ["yes", "yes", "no", "yes", "no", "yes"]

logical = [item=='yes' for item in my_list]

输出

[True, True, False, True, False, True]

或者,您甚至可以使用地图:

logical = list(map(lambda x: x=='yes', my_list))

【讨论】:

    【解决方案2】:

    可能最好的答案是使用包numpy。 Numpy 数组的作用类似于 R 向量。

    import numpy as np
    my_list = np.array(["yes", "yes", "no", "yes", "no", "yes"])
    my_list == "yes"
    array([ True,  True, False,  True, False,  True])
    

    【讨论】:

    • 为了运行 map 的列表理解/等效项而引入 numpy 感觉设计过度。
    • 好吧,如果你想要类似于 R 的行为,那就是你必须做的。如果您来自 R,那么您可能正在处理数据,所以我想您已经安装了 numpy。
    • 这个问题专门针对一个常规的 Python 列表,他们没有询问使其与 R 相同的方法,只是一种简单的方法。列表理解很简单,并提供了他们要求的结果。我并不是说应该删除答案或其他任何东西,但它可能不会引起太大兴趣。
    • 很公平,我认为使用 numpy 更简单,特别是如果你来自 R。
    【解决方案3】:

    您可以使用 map() 函数和语法 map(<function>, <iterable>)。但是,您必须将其编码为 list() 才能产生结果,例如:

    my_list = ["yes", "yes", "no", "yes", "no", "yes"]
    my_list_logical = list(map(lambda x: x == "yes", my_list))
    print(my_list_logical)
    

    输出

    [True, True, False, True, False, True]
    

    【讨论】:

      【解决方案4】:

      您可能会非常使用列表推导:

      my_list = ["yes", "yes", "no", "yes", "no", "yes"]
      result = [item == "yes" for item in my_list]
      

      产量

      [True, True, False, True, False, True]
      

      【讨论】:

        【解决方案5】:

        是的,这是我能想到的最合乎逻辑的方式

        my_list = ["yes", "yes", "no", "yes", "no", "yes"]
        my_list_logical = []
        for i in my_list:
           if i == “yes”:
              my_list_logical.append(True)
           else:
              my_list_logical.append(False)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-02-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-24
          • 2011-03-03
          • 1970-01-01
          相关资源
          最近更新 更多