SORU
27 Kasım 2010, CUMARTESİ


Python: bir dize numaraları Özü

Bütün sayıları içeren dize ayıklamak istiyorum. Hangi amaç için daha uygun, düzenli ifadeler veya isdigit() yöntem nedir?

Örnek:

line = "hello 12 hi 89"

Sonuç:

[12, 89]

CEVAP
27 Kasım 2010, CUMARTESİ


Eğer sadece pozitif tamsayılar ayıklamak istiyorsanız, aşağıdakileri deneyin:

>>> str = "h3110 23 cat 444.4 rabbit 11 2 dog"
>>> [int(s) for s in str.split() if s.isdigit()]
[23, 11, 2]

Bu üç sebep için normal ifade örneği daha iyi olduğunu iddia ediyorum. İlk ihtiyacın yok başka bir modül; ikincisi, daha okunabilir, çünkü gerek yok ayrıştırma düzenli mini-Dil; ve üçüncü olarak, daha hızlı (ve dolayısıyla daha pythonic):

python -m timeit -s "str = 'h3110 23 cat 444.4 rabbit 11 2 dog' * 1000" "[s for s in str.split() if s.isdigit()]"
100 loops, best of 3: 2.84 msec per loop

python -m timeit -s "import re" "str = 'h3110 23 cat 444.4 rabbit 11 2 dog' * 1000" "re.findall('\\b\\d \\b', str)"
100 loops, best of 3: 5.66 msec per loop

Bu yüzen, negatif tamsayı veya onaltılık biçimde tamsayılar tanımayacaktır. Eğer kabul edersen bu sınırlamalar, slim's answer below işinizi görecektir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • SuperPrincessjo

    SuperPrinces

    1 EKİM 2010
  • Tek Syndicate

    Tek Syndicat

    23 Temmuz 2008
  • Valdorsha

    Valdorsha

    8 Mayıs 2006