2011-04-27 8 views

답변

5
''.join(c.lower() for c in s if not c.isspace()) 

아니요. 파이썬은 루비가 아닙니다.

+0

가 파이썬에서 덜 사용되는 정규식은 무엇인가? 없습니다 –

+1

정규식은 일반적으로 필요하지 않습니다. –

+2

@DutrowLLC, 그들은 일반적으로 필요하지 않지만 필수적인 경우가 있습니다. – ghostdog74

2
>>> string=""" a b  c 
... D E   F 
...      g 
... """ 
>>> ''.join( i.lower() for i in string.split() ) 
'abcdefg' 
>>> 

또는 여기

>>> ''.join(map(str.lower, string.split()) ) 
'abcdefg' 
+0

조인 분할 솔루션은 John Machin의 답변보다 훨씬 느립니다. timeit을 사용하여 250,000 명의 담당자에게 0.733391046524s의 응답을 보냈습니다 (해당 솔루션에 대해 0.413959026337s). 가장 빠르다! – radtek

1

이 솔루션은 정규 표현식을 사용하고 있습니다 : 복잡하지 않은 빠른 대답에 대한

>>> import re 
>>> test = """AB cd KLM 
    RST l 
    K""" 
>>> re.sub('\s+','',test).lower() 
    'abcdklmrstlk' 

+0

이것은 250k 반복에서 0.809034109116s의 가장 느린 것 같습니다. John Machin의 솔루션은 0.411396980286s입니다. 지도는 0.582627058029에서 이보다 더 빠릅니다. – radtek

18

어떻게? 어떤 map, 아니 for 루프, ...

>>> s = "Foo Bar " * 5 
>>> s 
'Foo Bar Foo Bar Foo Bar Foo Bar Foo Bar ' 
>>> ''.join(s.split()).lower() 
'foobarfoobarfoobarfoobarfoobar' 
>>> 

[파이썬 2.7.1]

>python -mtimeit -s"s='The quick brown Fox jumped over the lazy dogs'" "''.join(c.lower() for c in s if not c.isspace())" 
100000 loops, best of 3: 11.7 usec per loop 

>python27\python -mtimeit -s"s='The quick brown Fox jumped over the lazy dogs'" "''.join( i.lower() for i in s.split() )" 
100000 loops, best of 3: 3.11 usec per loop 

>python27\python -mtimeit -s"s='The quick brown Fox jumped over the lazy dogs'" "''.join(map(str.lower, s.split()) )" 
100000 loops, best of 3: 2.43 usec per loop 

>\python27\python -mtimeit -s"s='The quick brown Fox jumped over the lazy dogs'" "''.join(s.split()).lower()" 
1000000 loops, best of 3: 1 usec per loop 
+0

+1은 가장 빠르고 정확한 옵션을 사용할 수도 있습니다. – samplebias

+0

+1, 참으로 빠른 나는 지금까지 보았다. 250,000 반복을 사용하여 timeit 모듈로 확인 0.403948068619s는 스플릿을 사용하고, 0.585318088531s는 맵을 사용합니다. 고맙습니다! – radtek

관련 문제