我想要做的是将列表的所有偶数替换为0,例如
list = [1,2,3,4,5]
将为list = [1,0,3,0,5]
我想过这样做
list = [1,2,3,4,5]
for i in list:
if i % 2 == 0:
# then replace the even numbers with 0
问题是我无法弄清楚如何编写下一行代码
答案 0 :(得分:6)
问题是,如果你这样开始
for i in lst:
if i %2 == 0:
# don't know the index of i
但是,您可以使用enumerate
来跟踪索引 - 现在很容易
for idx, i in enumerate(lst):
if i % 2 == 0:
lst[idx] = 0
通常使用列表推导更简单,并用新的列表替换整个列表。
您可以使用按位和&
>>> L = [1, 2, 3, 4, 5]
>>> L = [x if x & 1 else 0 for x in L]
>>> L
[1, 0, 3, 0, 5]
根据您的CPU和Python实现,您可能会发现这更快(但在我看来可读性较差):
[x * (x & 1) for x in L]
答案 1 :(得分:2)
您可以使用类似的列表理解来执行此操作:
list = [x * (x%2) for x in list]
print list
请注意,x%2只能得到1或0.因此,如果数字是偶数,则乘法的结果为0,如果是奇数,则为数字本身。
答案 2 :(得分:2)
>>> my_list = [1,2,3,4,5]
>>> def myfun(x):
if x % 2 != 0:
return x
else:
return 0
>>> list(map(myfun, my_list))
[1, 0, 3, 0, 5]
答案 3 :(得分:1)
试试这个:
my_list = [1,2,3,4,5]
my_result = list()
for number in my_list:
if number % 2 == 0:
my_result.append(0)
else:
my_result.append(number)
print my_result
您还可以使用list comprehensions
:
my_list = [1,2,3,4,5]
print [0 if x%2==0 else x for x in my_list]
两个示例的输出相同:
[1, 0, 3, 0, 5]
重要的是要强调
list
是其list
数据结构的Python保留字。这就是我为列表指定一个不同名称的原因。
<强>文档强>
列表理解:https://docs.python.org/2/tutorial/datastructures.html#list-comprehensions
答案 4 :(得分:0)
使用ShowAlertFactory.showAlertMessage();
:
List Comprehension and ternary method
<强>输出:强>
list1 = [1,2,3,4,5]
list1[:] = [a if a%2 != 0 else 0 for a in list1 ] # [i if i % 2 == 1 else 0 for i in L]
print list1
备注:强>
[1, 0, 3, 0, 5]
我没有创建新添加到现有列表list1[:]
然后给出了相同的值,如果不是我给了odd
或者正常方法
<强>代码1:强>
0
<强>输出:强>
list1 = [1,2,3,4,5]
for i,v in enumerate(list1):
if v%2==0:
list1[i]=0
print list1
答案 5 :(得分:0)
lst = [1,2,3,4,5]
# List comp
[x if x % 2 else 0 for x in lst] # when x % 2 is 0 if returns false
# for-loop
for i, x in enumerate(lst):
if x % 2 == 0:
lst[i] = 0
#Output
[1, 0, 3, 0, 5]