2017-12-22 9 views
0

하나 개의 요소 목록에서 여러 요소의 조각을 교체하고 하나 개의 요소로 대체 ​​:이 생산, 때로는에만 작동목록에서, 내가 가변 크기, 조각을 찾기 위해 노력하고

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) 

:

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

하지만 lt = ['d', 'c']r = 'dc' 경우, 그것은 생산 실패 :

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

어떻게 해결할 수 있습니까? 또는 이것을 처리하는 더 좋은 방법은 무엇입니까?

+0

고맙습니다. 나는 그것을 강조하기 위해 편집 할 것이다. –

답변

1

간단한 방법 (lt이 여러 번 나타날 수 있는지 여부에 따라 달라질 수 있음).

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

스테판에게 감사드립니다. 'lt'가 여러 번 나타날 가능성은 거의 없지만 만약 그렇다면 어떻게해야할까요? –

+1

그러면 겹치는 지 여부에 따라 다릅니다. 겹치지 않으면이 코드는 여전히 잘 작동합니다. –

+0

@HameerAbbasi 맞아요, 그럼에도 불구하고 여전히 잘 동작합니다 (모든 외형을 대체한다고 가정 함), 루프는 불필요하게 멀리갑니다. (어쨌든, 저는 게으르며 간단한 코드를 선호하기 때문에 :-). –

관련 문제