列表理解条件中的`elif`

sel*_*elf 99 python list

我们可以elif在列表理解中使用吗?

示例:

l = [1, 2, 3, 4, 5]

for values in l:
    if values==1:
        print 'yes'
    elif values==2:
        print 'no'
    else:
        print 'idle'
Run Code Online (Sandbox Code Playgroud)

我们能否elif以类似于上面代码的方式包含我们的列表理解?

例如,答案如下:

['yes', 'no', 'idle', 'idle', 'idle']
Run Code Online (Sandbox Code Playgroud)

到目前为止,我只使用ifelse列表理解.

Ray*_*ger 202

Python的条件表达式完全是为这种用例设计的:

>>> l = [1, 2, 3, 4, 5]
>>> ['yes' if v == 1 else 'no' if v == 2 else 'idle' for v in l]
['yes', 'no', 'idle', 'idle', 'idle']
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助 :-)

  • 我喜欢这些如何连在一起 (12认同)
  • 语法中有一些有趣的历史.在他们介绍之前的许多年里,"高等教育表达"是该语言中最需要的五个变化之一.由于Guido van Rossum明确地将其设计为基于陈述的语言,他长期坚持抵制(高等教育,特别是他们的滥用,是代码中含糊不清的来源).当他最终屈服时,他宣布他故意选择了一种不鼓励过度使用的语法.像往常一样,他做了一件优雅的设计工作. (4认同)
  • 三元,该死的(他写道,注意到他的阅读障碍错误来不及编辑)。 (3认同)
  • 当我投票给这个答案时,我想提一下:1对if / else易于阅读,2对:变得越来越难以理解。甚至不提3对。如果表达式需要三对或更多对,则词典或单独的函数将使事情更易于阅读和理解。 (2认同)
  • 我偶然发现一个情况,我需要一个 elif,但只有两个值。使用这个例子,我只需要制作 `['yes', 'no']` 。为此,您可以执行以下操作:“['yes' if v == 1 else 'no' for v in l ifvalues in [1,2]]”。我目前想不出更干净的方法来做到这一点。 (2认同)

Ign*_*ams 45

>>> d = {1: 'yes', 2: 'no'}
>>> [d.get(x, 'idle') for x in l]
['yes', 'no', 'idle', 'idle', 'idle']
Run Code Online (Sandbox Code Playgroud)

  • @jdi尽管条件表达式可能不符合您的口味,但它们*专门用于处理if-elif-elif-else链,就像OP要求的那样.它们并不难学,可以优雅地处理不适合字典查找逻辑的情况:`''A'如果等级> = 90否则'B'如果等级> = 80否则'C'如果等级> = 70其他'F'`` (5认同)
  • 我认为这个表单比在list comp中执行一个非常长且复杂的if/else逻辑要容易理解 (4认同)
  • 如果在理解之外定义`d`有优势吗? (2认同)

mat*_*fee 23

你可以,有点.

请注意,当您使用sytax时:

['yes' if v == 1 else 'no' for v in l]
Run Code Online (Sandbox Code Playgroud)

您正在使用if/else运算符的三元形式(如果您熟悉C语言,这就像?:构造:)(v == 1 ? 'yes' : 'no').

if/else运算符的三元形式没有内置的'elif',但您可以在'else'条件下模拟它:

['yes' if v == 1 else 'no' if v == 2 else 'idle' for v in l]
Run Code Online (Sandbox Code Playgroud)

这就像说:

for v in l:
    if v == 1 :
        print 'yes'
    else:
        if v == 2:
            print 'no'
        else:
            print 'idle'
Run Code Online (Sandbox Code Playgroud)

所以没有像你问过的直接"elif"结构,但可以使用嵌套的if/else语句进行模拟.

  • 很好的解释... +1 使用常规 if else 语法包含等效表达式。 (4认同)