现有一列表:
a = [1, 3, 4, 0, 1, 5, 5, 1, 5, 1, 5, 6, 2, 3, 1, 5, 3]
条件:
- 删除所有
5
元素前面的元素1
- 在所有的
3
元素后面加上 3 个元素2
该怎么操作?
更新:是两个条件同时满足,不是分别。
现有一列表:
a = [1, 3, 4, 0, 1, 5, 5, 1, 5, 1, 5, 6, 2, 3, 1, 5, 3]
条件:
5
元素前面的元素 1
3
元素后面加上 3 个元素 2
该怎么操作?
更新:是两个条件同时满足,不是分别。
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.
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)
2 回答5.3k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
4 回答1.5k 阅读✓ 已解决
3 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
2 回答953 阅读✓ 已解决
1 回答1.8k 阅读✓ 已解决