문제

공백으로 구분 된 라인 당 1,000,000 줄의 ~ 20-100 개의 토큰을 1,000,000 라인이 있음을 감안할 때, 각 라인의 길이를 계산하는 것은 비 - 트래블의 종류가됩니다.

두 개의 토큰 사이에 두 번 공백이없는 것으로 가정하면

  1. len(text.split())보다 빠르게 text.count(" ")+1입니까?

  2. 그리고 왜 그렇게?

도움이 되었습니까?

해결책

더 빨리 확인하기 쉽습니다 :

>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())]
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top