Question

Étant donné que j'ai plus 1 000 000 000 de lignes de ~20 à 100 jetons par ligne délimitée par des espaces, en comptant la longueur de chaque ligne devient sorte de non-trival.

En supposant qu'il n'y a jamais de double les espacements entre les deux jetons,

  1. Est len(text.split()) plus rapide que text.count(" ")+1?

  2. Et pourquoi donc?

Était-ce utile?

La solution

Facile de vérifier ce qui est plus rapide:

>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 est plus lent, probablement parce qu'il construit la splittés liste.

Autres conseils

text.count(" ") a tort, voir ci-dessous:

In [706]: t='a  b    c'

In [707]: t.split()
Out[707]: ['a', 'b', 'c']

In [708]: t.count(' ')
Out[708]: 6

Vous ne voulez pas obtenir 6 dans ce cas.

Votre prémisse est erronée.Ces deux opérations ne donnent pas les mêmes résultats, permet d'utiliser votre question comme par exemple:

>>> 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

Compte tenu de votre question de "comptage de la longueur de chaque ligne du" ni de ceux des opérations de même le faire.

Compter chaque ligne que vous devez faire:

line_lengths = [len(line) for line in text.splitlines()]

Mais il serait probablement préférable de noter le numéro de la ligne:

line_lengths = [(idx, len(line)) for idx, line in enumerate(text.splitlines())]
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top