Дано:
my_list = ['NO!',0,0,0,0,0,0,0,0,0,0,0,0]
target = "XXX"
step = 3
Вы можете использовать назначение среза с троичным :
my_list[::step]=[target if item==0 else item for item in my_list[::step]]
>>> my_list
['NO!', 0, 0, 'XXX', 0, 0, 'XXX', 0, 0, 'XXX', 0, 0, 'XXX']
Учитывая несколькокомментарии, я думаю вы ищете 1) проверить, если вставка 'XXX' каждые три элемента возможна без столкновения;2) переместитесь на 1 элемент и попробуйте еще раз, если нет.(Теперь вам нужно определить, как далеко вы должны продвинуться, но это другая проблема, чем изначально описанная)
Если я правильно понял, вы все равно можете использовать назначение срезов.Вам просто нужно добавить механизм для проверки и добавить смещение:
def f(my_list, offset=0, step=3):
while offset<len(my_list):
if any(item!=0 for item in my_list[offset::step]):
offset+=1
else:
my_list[offset::step]=[target for item in my_list[offset::step]]
break
return my_list
Проверьте это:
for i in range(13):
l=[0]*13
l[i]='AAA'
print '{} => {}'.format(l,f(l[:]))
Отпечатки:
['AAA', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] => ['AAA', 'XXX', 0, 0, 'XXX', 0, 0, 'XXX', 0, 0, 'XXX', 0, 0]
[0, 'AAA', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] => ['XXX', 'AAA', 0, 'XXX', 0, 0, 'XXX', 0, 0, 'XXX', 0, 0, 'XXX']
[0, 0, 'AAA', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] => ['XXX', 0, 'AAA', 'XXX', 0, 0, 'XXX', 0, 0, 'XXX', 0, 0, 'XXX']
[0, 0, 0, 'AAA', 0, 0, 0, 0, 0, 0, 0, 0, 0] => [0, 'XXX', 0, 'AAA', 'XXX', 0, 0, 'XXX', 0, 0, 'XXX', 0, 0]
[0, 0, 0, 0, 'AAA', 0, 0, 0, 0, 0, 0, 0, 0] => ['XXX', 0, 0, 'XXX', 'AAA', 0, 'XXX', 0, 0, 'XXX', 0, 0, 'XXX']
[0, 0, 0, 0, 0, 'AAA', 0, 0, 0, 0, 0, 0, 0] => ['XXX', 0, 0, 'XXX', 0, 'AAA', 'XXX', 0, 0, 'XXX', 0, 0, 'XXX']
[0, 0, 0, 0, 0, 0, 'AAA', 0, 0, 0, 0, 0, 0] => [0, 'XXX', 0, 0, 'XXX', 0, 'AAA', 'XXX', 0, 0, 'XXX', 0, 0]
[0, 0, 0, 0, 0, 0, 0, 'AAA', 0, 0, 0, 0, 0] => ['XXX', 0, 0, 'XXX', 0, 0, 'XXX', 'AAA', 0, 'XXX', 0, 0, 'XXX']
[0, 0, 0, 0, 0, 0, 0, 0, 'AAA', 0, 0, 0, 0] => ['XXX', 0, 0, 'XXX', 0, 0, 'XXX', 0, 'AAA', 'XXX', 0, 0, 'XXX']
[0, 0, 0, 0, 0, 0, 0, 0, 0, 'AAA', 0, 0, 0] => [0, 'XXX', 0, 0, 'XXX', 0, 0, 'XXX', 0, 'AAA', 'XXX', 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'AAA', 0, 0] => ['XXX', 0, 0, 'XXX', 0, 0, 'XXX', 0, 0, 'XXX', 'AAA', 0, 'XXX']
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'AAA', 0] => ['XXX', 0, 0, 'XXX', 0, 0, 'XXX', 0, 0, 'XXX', 0, 'AAA', 'XXX']
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'AAA'] => [0, 'XXX', 0, 0, 'XXX', 0, 0, 'XXX', 0, 0, 'XXX', 0, 'AAA']