0

私は本からはよく学べないので、プロジェクトを実行して Python を学ぼうとしている Noob です。

私には小さな操作のように見えるものを実行するために、巨大なコードの塊を使用しています -

次の文字列から 4 つの変数を抽出したい

'Miami 0, New England 28'  

(変数は home_team、away_team、home_score、away_score)

私のプログラムの実行速度は非常に遅く、おそらくこのコードのせいだと思います。これを行うための最も迅速で効率的な方法を探していると思います。

正規表現はより速いでしょうか?ありがとう

4

3 に答える 3

4

テキストが 2 回分割される可能性があるようです。最初,と次の空白:

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

正規表現を使えばそれほど難しいことはありませんが、読みやすさの点で代償を払う必要があります

于 2013-02-14T22:39:59.450 に答える
0

正規表現が必要な場合:

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')]に割り当てます。

于 2013-02-14T23:01:11.520 に答える
0
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'は「数字なし」を意味します

于 2013-02-14T23:19:02.023 に答える