扫码关注官方订阅号
现有一列表:
a = [1, 3, 4, 0, 1, 5, 5, 1, 5, 1, 5, 6, 2, 3, 1, 5, 3]
条件:
5
1
3
2
该怎么操作?
更新:是两个条件同时满足,不是分别。
业精于勤,荒于嬉;行成于思,毁于随。
a = [1, 3, 4, 0, 1, 5, 5, 1, 5, 1, 5, 6, 2, 3, 1, 5, 3] ','.join( [str(i) for i in a] ).replace('1,5', '5').replace('3', '3,2,2,2').split(',')
a = [1, 3, 4, 0, 1, 5, 5, 1, 5, 1, 5, 6, 2, 3, 1, 5, 3] a = [ a[i] for i in range(len(a)) if i == len(a) - 1 or a[i] != 1 or a[i+1] != 5 ] a = sum([x == 3 and [3,2,2,2] or [x] for x in a], []) print(a)
感谢 @土豆_612874 指正,不过使用 enumerate 会出现列表越界问题, 1.
enumerate
for i in range(len(a)-1, 0, -1): if a[i] == 5 and a[i-1] ==1: a.pop(i-1) print a
2.
for i in range(len(a)-1, -1, -1): if a[i] == 3: a.insert(i+1, 2) a.insert(i+1, 2) a.insert(i+1, 2) print a
@m3l3_L 答案可以更加精简点,用enumerate 另外删除所有 5 元素前面的元素 1,应该只是指紧挨着5的那个1吧? 1.
for i, n in enumerate(a): if n == 1 and a[i+1] == 5: a.pop(i)
2.这样的实现其实也是有问题的,但是比较QUICK AND DIRTY。如果在3后面插入又是3,那么就死循环了。
for i, n in enumerate(a): if n == 3: a.insert(i+1, 2) a.insert(i+1, 2) a.insert(i+1, 2)
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
感谢 @土豆_612874 指正,不过使用
enumerate会出现列表越界问题,1.
2.
@m3l3_L 答案可以更加精简点,用enumerate
另外删除所有 5 元素前面的元素 1,应该只是指紧挨着5的那个1吧?
1.
2.这样的实现其实也是有问题的,但是比较QUICK AND DIRTY。如果在3后面插入又是3,那么就死循环了。