2

我有一个清单,可以说:

test = [False, False, 2, False, False, False, 3, False, False]

并且我想将此列表的每个成员分配给 False 除非该成员等于 2 所以结果应该是:

test = [False, False, 2, False, False, False, False, False, False]

我试过 :

test = [False for i in test if i !=2]

但结果是:

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

我尝试定义一个函数:

def set_False(lst):
     for i in lst:
         if i != 2:
            i = False
    return lst

当我申请时:

test = set_False(test)

结果是:

[False, False, 2, False, False, False, 3, False, False]

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

谢谢

4

3 回答 3

11

它是

[False if i !=2 else 2 for i in test]

否则,当它等于 2 时,您将跳过整个元素。

于 2012-11-16T13:47:08.713 回答
3

在您的情况下,可以通过以下方式进行就地修改:

   for i in range(len(lVals)):
       if lVals[i] != 2:
           lVals[i] = False
于 2012-11-16T13:46:58.907 回答
1

列表推导可能是实现目标的最 Pythonic 方式:

myList = [False, False, 2, False, False, False, 3, False, False]
myFilteredList = [False if i !=2 else i for i in myList]

如果您不想使用这样的语法,另一种方法是使用映射函数

def myFilter(i):
   return False if i!=2 else i

myList = [False, False, 2, False, False, False, 3, False, False]
myFilteredList = map( myFilter, myList )
于 2012-11-16T14:05:54.383 回答