2

我有一个listx =[1,2,3,4,5,6,7,8,9]

我想更改列表中的每 N 个项目。例如,我想为每 2 项步骤进行修改,假设我想通过 +1 进行修改。所以我想得到结果=[1+1,2,3+1,4,5+1,6,7+1,8,9+1] =[2,2,4,4,6,6,8,8,9]

我可以通过使用 for-loop 来做到这一点,通过添加计数器变量,然后通过 counter%2==0 检查计数器。但这次我只是好奇使用单行语句。这是我想要的=

newlistx=[i+1 for i in listx]<- 这将修改所有项目,所以我希望我可以在这个迭代过程中使用一些内部索引,变成这样:

newlistx=[i+1 if (__indexing__%step==0) else i for i in listx]其中步骤 = 2。

实际上,我可以使用 list.index() 函数,如下所示:

newlistx=[i+1 if listx.index(i)%2==0 else i for i in listx]

这个问题只有在所有项目都是唯一的情况下才有效,如果我得到的项目具有相同的值,那么 index() 将返回错误的值。

同样,我只是好奇我是否可以获取一些内部索引或计数器(如果存在)。

4

2 回答 2

7

您可以使用该enumerate功能。

newlist = [x + 1 if n % step == 0 else x
           for (n, x) in enumerate(oldlist)]

enumerate函数遍历一个序列并产生带有索引的对象。

于 2012-06-19T09:20:39.437 回答
1
new_list = [n + 1 if i & 1 else n for i, n in enumerate(listx)]
于 2012-06-19T11:32:31.947 回答