我有一个清单,让我们说:
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]
我不能在我放置代码的环境中使用枚举,所以有什么建议吗?
谢谢
答案 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 )