当前位置:  开发笔记 > 编程语言 > 正文

根据前一个元素增加下一个元素

如何解决《根据前一个元素增加下一个元素》经验,为你挑选了2个好方法。

循环遍历列表时,您可以使用列表的当前项.例如,如果要将某些项目替换为其他项目,则可以使用:

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.我已经尝试了很多年,我似乎无法使它工作.我想要这样的东西:

c=['a','b','c','d','e']

d=[]
for i in c:
    if i+1=='b':
       d.append('replacement')     
    else:   
        d.append(i)


print d

d=['replacement','b','c','d','e']

有没有办法实现这个目标?



1> Bhargav Rao..:

使用列表理解和enumerate

>>> ['replacement' if a[i+1]=='b' else v for i,v in enumerate(a[:-1])]+[a[-1]]
['replacement', 'b', 'c', 'd', 'e']

代码替换了下一个元素所在的所有元素b.但是为了处理最后一个索引并防止IndexError,我们只是追加最后一个元素并循环直到倒数第二个元素.


没有列表理解

a=['a','b','c','d','e']
d=[]
for i,v in enumerate(a[:-1]):
    if a[i+1]=='b':
        d.append('replacement')     
    else:   
        d.append(v)
d.append(a[-1])
print d



2> Randy..:

在Python中不迭代索引通常是更好的风格.解决此类问题的常用方法是使用zip(或类似izip_longestitertools)一次查看多个值:

In [32]: from itertools import izip_longest

In [33]: a=['a','b','c','d','e']

In [34]: b = []

In [35]: for c, next in izip_longest(a, a[1:]):
   ....:     if next == 'd':
   ....:         b.append("replacement")
   ....:     else:
   ....:         b.append(c)
   ....:

In [36]: b
Out[36]: ['a', 'b', 'replacement', 'd', 'e'] 

推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有