2010-07-12 6 views
27

mysql 데이터베이스에서 추가 된 객체 목록이 있고 공백이 있습니다. 나는 아래와 같은 공백을 제거하고 싶지만, 코드는 나던가?Python : 목록 객체에서 공백 제거

hello = ['999 ',' 666 '] 

k = [] 

for i in hello: 
    str(i).replace(' ','') 
    k.append(i) 

print k 
+2

또는 데이터베이스 필드 ;-) – ChristopheD

+0

의 유형을 수정 @ChristopheD : 어떤 데이터베이스 "필드"형의 힘은 ** ** 공간을 선도? 개발자와 테스터를 수정하는 것이 더 좋습니다. –

+1

@Johan Machin : 두 번째 항목에서 가장 앞선 공간을 잘못 처리했습니다. (너무 빠르다고 판단한 경우) – ChristopheD

답변

63

문자열 불변 (데이터가 변경 될 수 없다는 것을 의미 함) 따라서 대체 방법은 문자열을 수정하지 - 새로운 문자열을 반환합니다. 코드를 다음과 같이 수정할 수 있습니다.

for i in hello: 
    j = i.replace(' ','') 
    k.append(j) 

그러나 목표 달성을위한 더 좋은 방법은 목록 이해력을 사용하는 것입니다.

hello = [x.strip(' ') for x in hello] 
+7

스트립 +1. -1 replace ('', '')에 대해 –

+1

OP는 예고편뿐만 아니라 * 모든 공백을 제거하려고하므로 'replace (' ',' ')'에 대해 -1을 사용해야하는 이유는 무엇입니까? 'strip'메서드는 없으며 다른 [str 내장 메서드] (http://docs.python.org/library/stdtypes.html#string-methods)는 Rube Goldbergs를 무시하고 ' '.join (s.split())'). –

+0

아, 가끔 키워드가 포함되어있을 수 있으므로 텍스트로 정의 된 수천, 수백만 등을 구분하는 데 공백을 사용하는 텍스트 필드가 아닙니까? 좋아, 나는 그것을 놓쳤다. –

5

결과 = 맵 (람다 X : x.strip(), 헬로) 파이썬

+3

'람다'를 사용할 필요가 없습니다. 대신에'result = map (str.strip(), hello)'를 사용할 수 있습니다. 그러나 @riza에서 언급했듯이, Python 3 map에서는리스트 대신에 반복자를 반환합니다. 그러므로 가장 좋은 방법은'result = list (map (str.strip(), hello))'입니다. – amicitas

+1

(적어도 파이썬 3에서는)'map (str.strip, mylist)'이 아니라'map (str.strip, mylist)'이라고 말해야한다는 것에주의하십시오. – William

2

문자열 방법은 수정 된 문자열을 반환 예를 들어 다음 코드는 선도 strip를 사용하여 목록에있는 모든 문자열에서 후행 공백을 제거합니다.

k = [x.replace(' ', '') for x in hello] 
0

replace()는 내부에서 작동하지 않으므로 결과에 무언가를 할당해야합니다. hello_no_spaces = map(lambda x: x.replace(' ', ''), hello)

1

는 내부 공간을 제거하지 않는 것을 가정하면 : [num.strip() for num in hello]가 가장 빠른

def normalize_space(s): 
    """Return s stripped of leading/trailing whitespace 
    and with internal runs of whitespace replaced by a single SPACE""" 
    # This should be a str method :-(
    return ' '.join(s.split()) 

replacement = [normalize_space(i) for i in hello] 
6

목록 이해를 또한,보다 간결 구문, 당신은 한 줄과 루프 당신을 대체 할 수 .

>>> import timeit 
>>> hello = ['999 ',' 666 '] 

>>> t1 = lambda: map(str.strip, hello) 
>>> timeit.timeit(t1) 
1.825870468015296 

>>> t2 = lambda: list(map(str.strip, hello)) 
>>> timeit.timeit(t2) 
2.2825958750515269 

>>> t3 = lambda: [num.strip() for num in hello] 
>>> timeit.timeit(t3) 
1.4320335103944899 

>>> t4 = lambda: [num.replace(' ', '') for num in hello] 
>>> timeit.timeit(t4) 
1.7670568718943969 
+0

'map (str.strip, hello))'는'map'이리스트 자체를 반환하기 때문에별로 의미가 없습니다. – ChristopheD

+1

@ChristopheD : Python 3에서 map이 목록을 반환하지 않습니다. – riza

0
for element in range(0,len(hello)): 
     d[element] = hello[element].strip() 
+2

코드 외에도 답변의 작동 방식과 문제 해결 방법을 설명하십시오. – buczek