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

时间:2012-11-16 13:45:20

标签: python list

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

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]

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

谢谢

3 个答案:

答案 0 :(得分:11)

这是

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

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

答案 1 :(得分:3)

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

   for i in range(len(lVals)):
       if lVals[i] != 2:
           lVals[i] = False

答案 2 :(得分:1)

List comprehensions可能是实现目标的最灵活方式:

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

如果您不想使用这样的语法,另一个approch就是使用mapping function

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

myList = [False, False, 2, False, False, False, 3, False, False]
myFilteredList = map( myFilter, myList )