2017-12-22 11 views
0

ich ein Stück zu finden versuche, variabler Größe, in einer Liste und ersetzen Sie es mit einem Element:Ersetzen einer Scheibe aus mehreren Elementen in einer Liste mit einem Element

ls = ['c', 'b', 'c', 'd', 'c'] 
lt = ['b', 'c'] 
r = 'bc' 

for s,next_s in zip(ls, ls[1:]): 
    for t, next_t in zip(lt, lt[1:]): 
     if (s, next_s) == (t, next_t): 
      i = ls.index(s) 
      ii = ls.index(next_s) 
      del ls[i] 
      del ls[ii] 
      ls.insert(i, r) 
      print (ls) 

manchmal Dies funktioniert nur, produzieren :

['c', 'bc', 'd', 'c'] 

aber wenn lt = ['d', 'c'] und r = 'dc', schlägt sie produzieren:

['b', 'c', 'c', 'dc'] 

Wie behebt man das? Oder was ist ein besserer Weg, damit umzugehen?

+0

Ich sehe. Vielen Dank. Ich werde bearbeiten, um das hervorzuheben. –

Antwort

1

Einfache Möglichkeit, die für Sie arbeiten könnte (hängt davon ab, ob lt kann mehrmals auftreten und was dann zu tun).

ls = ['c', 'b', 'c', 'd', 'c'] 
lt = ['b', 'c'] 
r = 'bc' 

for i in range(len(ls)): 
    if ls[i:i+len(lt)] == lt: 
     ls[i:i+len(lt)] = [r] 
     print(ls) 
+0

Danke Stefan. Es ist sehr unwahrscheinlich, dass "lt" mehrmals erscheint, aber was ist, wenn es so ist? –

+1

Dann kommt es darauf an, ob es sich überschneidet oder nicht. Wenn es sich nicht überschneidet, funktioniert dieser Code immer noch einwandfrei. –

+0

@HameerAbbasi Richtig, dann funktioniert es immer noch gut (vorausgesetzt, dass alle Erscheinungen ersetzt werden), die Schleife geht einfach unnötig weit (was es sowieso macht, da ich faul bin und einfachen Code bevorzuge :-). –

Verwandte Themen