【问题标题】:Python-Multiple conditions under if statementPython-if语句下的多个条件
【发布时间】:2019-08-19 12:29:33
【问题描述】:

我正在尝试编写一个函数来对给定数据集中的商品进行分类(我知道,以一种非常直接的方式)。

看起来像:

def classifier(x):
    if ('smth' or 'smth' or 'smth') in x:
        return 'class1'
    elif ('smth' or 'smth' or 'smth') in x:
        return 'class2'

所以,问题是某些条件不起作用。当我尝试单独检查条件时 - 一切正常。但是在函数中出现了问题。

我将 thing 函数与 pandas apply-method 一起使用:

data['classes'] = data['subj'].apply(lambda x: classifier(x))

【问题讨论】:

  • When I try to check conditions separately - everything works. But in the function something goes wrong.你能详细说明一下吗?
  • @TZHX 当然可以,但它会是俄语的……你可以吗?
  • ifelif 条件相同。
  • @nutcracker, пайтон так не работает, ('smth' or 'smth' or 'smth') будет вычислять/сравнивать сами значения по логическому приведению, а не вхождения в список x
  • @glglgl,我回答的第一段反映了这些 cmets 的问题(和详细说明)。 (我在那些简短的 cmets 之后添加了它)

标签: python string if-statement


【解决方案1】:

('smth' or 'smth' or 'smth') 执行从左到右的连续逻辑比较,但不检查它们在目标序列中的出现。

要检查预定义列表(可迭代)中的任何值是否出现在 目标 序列 x 中,请使用内置 any 函数:

def classifier(x):
    if any(i in x for i in ('a', 'b', 'c')):
        return 'class1'
    elif any(i in x for i in ('d', 'e', 'f')):
        return 'class2'

【讨论】:

    【解决方案2】:

    你可以用这个:

    def classifier(x):
        if 'smth' in x or 'smth' in x or 'smth' in x:
            return 'class1'
        elif 'smth' in x or 'smth' in x or 'smth' in x:
            return 'class2'
    

    您必须分别检查每个条件。

    【讨论】:

    • 有区别吗?
    • 您必须分别询问所有条件。
    • 为什么? python-forum.io/…
    • @nutcracker 该链接说它不起作用(这样做的例子是侥幸,不应依赖)。 ('a' or 'b') 首先被评估以产生一个字符串(或可能是布尔值),然后用于成员资格测试。您可能想知道是否在 x 中,因此您需要询问是否是 in x
    猜你喜欢
    • 1970-01-01
    • 2013-12-17
    • 1970-01-01
    • 2017-09-25
    • 1970-01-01
    • 2015-01-20
    • 2013-11-17
    • 2015-03-24
    • 1970-01-01
    相关资源
    最近更新 更多