2016-08-08 5 views
1

에 문자열에서 \ xa0을 제거 :나는 목록이 단어의 무리와 함께 목록

lista = ['Jeux Olympiques De Rio\xa02016', 'Sahara Ray', 'Michael Phelps', 'Amber Alert'] 

나는 '\xa0'를 교체하려고 :

for element in listor: 
    element = element.replace('\xa0',' ') 

하지만이 작동하지 않았다. 내가 요소를 print 때 또한, 그것은 인쇄 :

print(lista[0]) 
Jeux Olympiques De Rio 2016 

사람이이 문제를 해결하는 방법에 대한 아이디어가 있습니까?

+3

을 문자열은 변경할 수 없으므로 두 번째 코드 블록을 사용하여 문자열을 변경하지 않습니다. 목록에서 요소를 바꿔야합니다 – James

답변

2

가장 쉬운 방법 :

lista = [el.replace('\xa0',' ') for el in lista] 
+0

이것은 작동하지만 단점이 있습니다. * 모든 문자열을 원하지 않는 유니 코드 문자가 있더라도 모든 문자열을 대체합니다. –

+0

하지만 작성자는이 문자열이 정확히 어떤 문자인지 알 수 없습니다. –

+0

일해 줘서 고마워. :) – imfromsweden

2
for index, element in enumerate(listor): 
    listor[index] = element.replace('\xa0',' ') 

이제 문자열 자체를 변경하지 않고 목록 내의 문자열을 대체합니다. 이전에는 새로운 문자열을 동일한 변수 이름에 할당했습니다.이 문자열은 이전 문자열을 변경하지 않고 "요소"변수가 가리키는 문자열 만 변경합니다. 이것을 사용하면 실제로 목록 요소를 새 문자열로 덮어 쓰게됩니다.

2

그냥 문자열 '\xa0' 포함 된 경우 종료를 대체하는 지능형리스트를 사용

는 현재 접근 방식은 단지
res = [elem if '\xa0' not in elem else elem.replace('\xa0', '') for elem in lista] 

실제로 목록 lista를 수정하지 않고 통해 이름 (element)를 재 할당 이상. 목록의 이해는 원래 목록의 요소, 즉와 새 목록이 생성됩니다 :

for elem in lista 

\xa0 즉이 포함 된 모든 문자열 대체 :

elem if '\xa0' not in elem else elem.replace('\xa0', '') 
+0

replace가 문자열에서 아무런 발생도 발견하지 못하면 변경되지 않은 상태로 반환합니다 :'res = [elem.replace ('\ xa0', '') in elem in lista] – thodnev

+0

@thodnev는 괜찮지 만,'in'을 사용하면 일반적으로 함수 호출보다 빠릅니다. 나는 그 결과를 논하는 것이 아니라 오히려 그것이 필요하지 않다는 사실을 지적하고 있었다. –

+0

은 문자열의 길이와 목록에서 얼마나 많은 문자열을 대체해야하는지에 따라 다릅니다. 상상해 보면, 마지막에'\ xa0'라는 긴 문자열이 있다고 상상해보십시오.이 경우 문자열을 한 번 반복하고 char이 필요하며 교체 루틴 동안 두 번째로 반복합니다. 'str.replace'는 내부적으로'in' 멤버쉽 테스트와 내부적으로 구현 된 빠른 내장 메소드입니다. 따라서 오버 헤드가 발생하는 유일한 오버 헤드는 도트 한정입니다. – thodnev

관련 문제