在列表中循环时,可以使用列表的当前项。例如,如果要将某些项替换为其他项,可以使用:
a=['a','b','c','d','e']
b=[]
for i in a:
if i=='b':
b.append('replacement')
else:
b.append(i)
print b
['a', 'replacement', 'c', 'd', 'e']
但是,我希望替换的某些值不是基于索引i
,而是基于索引i+1
。我已经试了好长时间了,但似乎做不到。我想要这样的东西:
^{pr2}$
有没有办法做到这一点?在
Tags:
使用list comprehension和^{}
代码将替换下一个元素为
b
的所有元素。然而,为了处理最后一个索引并防止IndexError
,我们只需附加最后一个元素并循环到倒数第二个元素。在没有列表理解
^{pr2}$我想你的帖子里有一个混淆列表索引和列表元素的地方。在您编写的循环中,}没有意义,并将抛出
i
将是实际的元素(例如'b'
),而不是索引,因此{TypeError
异常。在我认为你可以对你的例子做的最小的改变之一就是:
另外,它还没有定义你应该如何处理边界。特别是当
i
指向最后一个元素'e'
时,i+1
应该指向什么?这里有很多可能的答案。在上面的例子中,我选择了一个选项,即提前一个元素结束迭代(因此我们从不指向最后一个元素e
)。在如果我这样做,我会做一些类似于其他答案的组合:
^{pr2}$在这里,我使用了一个列表理解来避免循环,在列表上使用^{} 和一个移位的列表来避免显式索引。在
在Python中不迭代索引通常是更好的方式。解决此类问题的一种常见方法是使用^{} (或} )同时查看多个值:
itertools
中类似的^{相关问题 更多 >
编程相关推荐