为python中的列表中的成员分配值

maz*_*lor 2 python list

我有一个清单,让我们说:

test = [False, False, 2, False, False, False, 3, False, False]
Run Code Online (Sandbox Code Playgroud)

并且我想将此列表的每个成员分配给False,除非此成员等于2,因此结果应为:

test = [False, False, 2, False, False, False, False, False, False]
Run Code Online (Sandbox Code Playgroud)

我试过了 :

test = [False for i in test if i !=2]
Run Code Online (Sandbox Code Playgroud)

但结果是:

[False, False, False, False, False, False, False, False]
Run Code Online (Sandbox Code Playgroud)

我尝试定义一个函数:

def set_False(lst):
     for i in lst:
         if i != 2:
            i = False
    return lst
Run Code Online (Sandbox Code Playgroud)

当我申请时:

test = set_False(test)
Run Code Online (Sandbox Code Playgroud)

结果是:

[False, False, 2, False, False, False, 3, False, False]
Run Code Online (Sandbox Code Playgroud)

我不能在我放置代码的环境中使用枚举,所以有什么建议吗?

谢谢

Sil*_*ost 11

它的

[False if i !=2 else 2 for i in test]
Run Code Online (Sandbox Code Playgroud)

否则,当它等于2时,你正在跳过整个元素.

  • 我发现这稍微好一些,因为它将条件与默认赋值`[i if i == 2 else False for i in test]`解耦.这允许你包装一个带有条件参数的函数,然后写(这里显示为lambda,因为我在注释中):`false_filter = lambda condition,seq:[i if condition(i)else False for我在seq]`你的代码然后变成`test = false_filter(lambda x:x == 2,test)`. (3认同)
  • @lvaldi:你为什么还要提呢呢? (2认同)