2017-01-22 2 views
1

드라이브 방향 정보가있는 기존 목록이 있습니다. 제목은 때때로 "/"로 구분됩니다. 그런 슬래시로 구분 된 목록 항목 만 병합하고 싶습니다. 5, 7, 9, 11, 나는이 목록에 슬래시의 다른 양을 처리 할 수있는 좋은 해결책을 찾을 수 없습니다 6, 8, 10"/"파이썬으로 구분 된 경우 목록 항목 병합

original_list = ['Keep', 'right', 'to continue on', 'Exit 18', ', follow signs for', 'Hoograven', '/', 'Lunetten', '/', 'Houten', '/', 'Nieuwegein', ''] 
output_list = ['Keep', 'right', 'to continue on', 'Exit 18', ', follow signs for', 'Hoograven/Lunetten/Houten/Nieuwegein', ''] 

삭제 : 예에서이 인덱스를 병합합니다. 이것에 대한 어떤 생각?

답변

1

이 함께 문자열을 조인 후 슬래시 주위의 구분을 제거하기 위해 대체 사용하고 다시 그것을 분할 :

'@'.join(L).replace('@/@', '/').split('@') 

은 다음과 같이 사용됩니다 : 이것은 오래 작동

>>> '@'.join(['Keep', 'right', 'to continue on', 'Exit 18', ', follow signs for', 'Hoograven', '/', 'Lunetten', '/', 'Houten', '/', 'Nieuwegein', '']).replace('@/@', '/').split('@') 
['Keep', 'right', 'to continue on', 'Exit 18', ', follow signs for', 'Hoograven/Lunetten/Houten/Nieuwegein', ''] 

선택한 구분 기호가 문자열에 나타나지 않으므로

+0

매우 영리하다 , 감사! 그리고 그것은 당신이 말하는 것보다 훨씬 낫습니다. 분리 자 (seperator)가 문자열에 나타나면 나중에 다시 병합되기 때문에 손상되지 않습니다. –

0

정말 멋진 해결책은 아니지만 작동해야합니다. 그것은 당신을 위해 좋은 어떤 경우 (예, original_list에서 첫 번째와 마지막 요소로 슬래시)의 이전 대답과는 다른 결과를 제공합니다 :

original_list = ['/', '/', 'Keep', 'right', 'to continue on', 'Exit 18', ', follow signs for', 'Hoograven', '/', '/', '/', 'Lunetten', '/', 'Houten', '/', 'Nieuwegein', '', '/', '/'] 
new_list = [] 

for i in range(len(original_list)): 
    if len(new_list) > 0 and i > 0 and (original_list[i] == '/' or original_list[i-1] == '/'): 
     new_list[-1] += original_list[i] 
    else: 
     new_list.append(original_list[i]) 

print new_list 

결과 :

['//Keep', 'right', 'to continue on', 'Exit 18', ', follow signs for', 'Hoograven///Lunetten/Houten/Nieuwegein', '//'] 
관련 문제