簡體   English   中英

Python-從字符串中提取數字/單詞時速度較慢

[英]Python - slow speed when extracting numbers/words from a string

Noob在這里嘗試通過做一個項目來學習python,因為我從書本上學得不好。

我正在使用大量的代碼來執行對我來說似乎是小的操作-

我想從以下字符串中提取4個變量

'Miami 0, New England 28'  

(變量為home_team,away_team,home_score,away_score)

我的程序運行很慢,我想可能是這段代碼。 我想我正在尋找最快/最有效的方法。

正則表達式會更快嗎? 謝謝

看來您的文字可能會被拆分兩次。 首先在,然后在空白:

info1,info2 = s.split(',')
home,home_score = info1.rsplit(None,1)
away,away_score = info2.rsplit(None,1)

例如:

>>> s = 'Miami 0, New England 28'
>>> info1,info2 = s.split(',')
>>> home,home_score = info1.rsplit(None,1)
>>> away,away_score = info2.rsplit(None,1)
>>> print [home,home_score,away,away_score]
['Miami', '0', ' New England', '28']

可以使用regex做到這一點而沒有太多困難-但是您出於可讀性方面的考慮而付出了代價。

如果您確實需要正則表達式:

import re

s='Miami 0, New England 28'
l=re.findall(r'^([^\d]+)\s(\d+)\s*,\s*([^\d]+)\s(\d+)',s)
hm_team,away_team,hm_score,away_score=l[0]

print l

打印[('Miami', '0', 'New England', '28')]並將這些值分配給變量。

import re

reg = re.compile('\s*(\D+?)\s*(\d+)'
                 '[,;:.#=@\s]*'
                 '(\D+?)\s*(\d+)'
                 '\s*')

for s in ('Miami 0, New England 28',
          'Miami0,New England28  ',
          '  Miami    0   . New England28',
          'Miami 0 ; New England 28',
          'Miami0#New England28  ',
          '  Miami 0   @ New England28'):

    print reg.search(s).groups()

結果

('Miami', '0', 'New England', '28')
('Miami', '0', 'New England', '28')
('Miami', '0', 'New England', '28')
('Miami', '0', 'New England', '28')
('Miami', '0', 'New England', '28')
('Miami', '0', 'New England', '28')

'\\D'表示'無數字'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM