Ecco un approccio più efficiente rispetto il mio primo, utilizzando l'elenco-slicing:
>>> for i in xrange(len(a) - len(b) + 1):
... if a[i:i+len(b)] == b:
... a[i:i+len(b)] = c
...
>>> a
[1, 3, 6, 2, 0, 0, 3, 4, 5, 6, 0, 0, 8]
Primo tentativo, per i posteri ....
Se non hai bisogno degli indici intermedi, ecco un approccio, utilizzando le funzioni stringa e adottando un metodo appropriato ch, non modificando la tua lista sul posto.
>>> a_as_str = ','.join(str(i) for i in a)
>>> print a_as_str
1,3,6,2,6,7,3,4,5,6,6,7,8
>>> b_as_str = ','.join(str(i) for i in b)
>>> b_as_str
'6,7'
>>> c_as_str = ','.join(str(i) for i in c)
>>> c_as_str
'0,0'
>>> replaced = a_as_str.replace(b_as_str, c_as_str)
>>> replaced
'1,3,6,2,0,0,3,4,5,6,0,0,8'
>>> [int(i) for i in replaced.split(',')]
[1, 3, 6, 2, 0, 0, 3, 4, 5, 6, 0, 0, 8]
Questo può essere riscritta come:
>>> def as_str(l):
... return ','.join(str(i) for i in l)
...
>>> def as_list_of_ints(s):
... return [int(i) for i in s.split(',')]
...
>>> as_list_of_ints(as_str(a).replace(as_str(b), as_str(c)))
[1, 3, 6, 2, 0, 0, 3, 4, 5, 6, 0, 0, 8]
Alcuni miglioramenti: utilizzando i nomi delle variabili usati dall'op, è possibile impostare l'intervallo come 'range (len (a) - len (b))'; il se "se a [i: i + len (b)] == b'; il compito 'a [i: i + len (b)] = c'. – jro