一个简单 Python 列表操作求解
迷茫
迷茫 2017-04-17 13:50:17
[Python讨论组]

现有一列表:

a = [1, 3, 4, 0, 1, 5, 5, 1, 5, 1, 5, 6, 2, 3, 1, 5, 3]

条件:

  1. 删除所有 5 元素前面的元素 1
  2. 在所有的 3 元素后面加上 3 个元素 2

该怎么操作?

更新:是两个条件同时满足,不是分别。

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(4)
大家讲道理
    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(',')
PHPz
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)
PHPz

感谢 @土豆_612874 指正,不过使用 enumerate 会出现列表越界问题,
1.

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)
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号