len (text.split ())은 text.count ( "")보다 빠릅니까?그리고 왜 그렇게?파이썬
-
21-12-2019 - |
문제
공백으로 구분 된 라인 당 1,000,000 줄의 ~ 20-100 개의 토큰을 1,000,000 라인이 있음을 감안할 때, 각 라인의 길이를 계산하는 것은 비 - 트래블의 종류가됩니다.
두 개의 토큰 사이에 두 번 공백이없는 것으로 가정하면
-
는
len(text.split())
보다 빠르게text.count(" ")+1
입니까? -
그리고 왜 그렇게?
해결책
더 빨리 확인하기 쉽습니다 :
>python -m timeit -s "s='q w e r t y u i o p a s d f g h j k l'" "s.count(' ')+1"
1000000 loops, best of 3: 0.272 usec per loop
>python -m timeit -s "s='q w e r t y u i o p a s d f g h j k l'" "len(s.split())"
1000000 loops, best of 3: 0.653 usec per loop
.
split
가 느리고, 아마도 분할 된 목록을 구성하기 때문입니다.
다른 팁
text.count(" ")
가 잘못되었습니다.
In [706]: t='a b c'
In [707]: t.split()
Out[707]: ['a', 'b', 'c']
In [708]: t.count(' ')
Out[708]: 6
.
이 경우 6을 얻고 싶지 않아요.
귀하의 전제가 올바르지 않습니다.이러한 작업 모두 동일한 결과를 제공하지 않으면 질문을 예로 들어 사용할 수 있습니다.
>>> text = "Given that I have 1,000,000,000 lines of ~20-100 tokens per line delimited by whitespace, counting the length of each line becomes sort of non-trival."
>>> len(text.split())
24
>>> text.count(" ")
23
.
"각 줄의 길이를 세는"문제가 해당 작업을 수행하지 않아도됩니다.
다음을 수행 해야하는 각 행을 계산합니다.
line_lengths = [len(line) for line in text.splitlines()]
.
라인 번호를 기록하는 것이 좋습니다.
line_lengths = [(idx, len(line)) for idx, line in enumerate(text.splitlines())]
. 제휴하지 않습니다 StackOverflow