我需要将列表添加1添加到第一个数字,然后用0替换剩余的数字。我尝试了很多不同的方法,但我要么只替换第二个项目,要么我的第一个项目消失或者它没有&# 39;简单地工作。
这就是我所拥有的:
key2=[8,10,10,10]
key2[0]+=1
for item in key2[1:]:
item=0
key2.append(item)
这是给我的
[9, 10, 10, 10, 0, 0, 0]
但我需要摆脱所有10
。如何进行for循环以获得此结果[9,0,0,0]
?
答案 0 :(得分:2)
for index in range(1, len(key2)):
key2[index]=0
在此代码中,我们将项目从第二个索引替换为最后一个索引0。
答案 1 :(得分:1)
一个班轮,使用enumerate()
lst = [ele+1 if i == 0 else 0 for i, ele in enumerate(lst)]
答案 2 :(得分:1)
>>> key2=[8,10,10,10]
>>> key2[0], key2[1:] = key2[0]+1, [ 0 for item in key2[1:]]
>>> key2
[9, 0, 0, 0]
答案 3 :(得分:0)
您可以使用range()
迭代索引,直到列表的长度,并将每个元素替换为0.
代码 -
for i in range(1, len(key2)):
key2[i] = 0
示例/演示 -
>>> key2=[8,10,10,10]
>>>
>>> key2[0]+=1
>>> for i in range(1, len(key2)):
... key2[i] = 0
...
>>> key2
[9, 0, 0, 0]
答案 4 :(得分:0)
您所做的就是将更多的零推到列表的末尾,而不是覆盖您要删除的10。相反,请尝试以下方法:
key2=[8,10,10,10]
key2[0]+=1
for num in range (1, len(key2)):
key2[num] = 0
>>> for num in range (1, len(key2)):
... key2[num] = 0
...
>>> key2
[9, 0, 0, 0]
>>>
答案 5 :(得分:0)
我喜欢函数式编程:
key2 = [8, 10, 10, 10]
key2 = map(lambda (i, v): 0 if i > 0 else v+1, enumerate(key2))
>>> key2
[9, 0, 0, 0]
map
遍历给定列表的每个元素,并将给定函数应用于元素。在我的例子中它是lambda函数。
我使用enumerate来获取列表中项目的索引,因此我在lambda函数中获得了这两个信息。
enumerate
创建一个生成器,对于给定列表或iterable的每个项,返回一个元组,该元组包含第一个位置中元素的索引和第二个位置中的元素。在示例中,它将返回:
[(0, 8), (1, 10), ...]
lambda
定义内联函数。在我们的示例中,该函数接受一个元组并将其值解包为i
和v
。如果i
(我们元素的索引)大于0
则返回0
,如果不是,请返回v+1
。
map
是一个函数,它将给定函数(在我们的例子中是lambda函数)应用于给定列表或iterable的每个元素(在我们的例子中是枚举的结果)。 map
使用函数的返回元素创建一个新列表。
由于enumerate
和map
是生成器,我们对记忆有好处。但是,我们基本上在内存中创建了列表的副本。重新分配后我们释放内存。因此,如果内存是一个问题,请不要这样做。如果没有,功能编程很好:)