1

フライト ルーティング コードのデータがあります。次のような文字列がたくさんあります。

routing = 'PBI-FLL/FMY/JAX/MIA/ORL-PNS/TPA-SRQ-CLE/CHI/HOU/WAS-DEN-ELP' 

次のような文字列を含むリストを取得する必要があります。

routinglist =  [['PBI'], ['FLL','FMY','JAX','MIA','ORL'], ['PNS','TPA'], ['SRQ'], ['CLE','CHI','HOU','WAS'], ['DEN']]

このコードを書きましたが、複雑すぎて必要に応じて機能しません

routingrules = 'PBI-FLL/FMY/JAX/MIA/ORL-PNS/TPA-SRQ-CLE/CHI/HOU/WAS-DEN-ELP' 
airports = []   
nn = 0
few = ''
airportcount = 0

for simvol in routingrules:
    if (nn) % 4 == 0:
        previous = routingrules[nn:nn+3]
        if routingrules[nn+3:nn+4] == '/':
            few = few + previous + "1,2"

        elif routingrules[nn+3:nn+4] == '-':
            if few != '':
                airports.append([few + previous])
                airportcount = airportcount+1
                few = ''                
            else:
                airports.append([previous])
                airportcount = airportcount+1
        else:
            if few != '':
                airports.append([few + previous])
                airportcount = airportcount+1
                few = ''    

        nn = nn+1
    nn = nn+1 

print airports

それは印刷します

[['PBI'], ['FLL1,2FMY1,2JAX1,2MIA1,2ORL'], ['PNS1,2TPA'], ['SRQ'], ['CLE1,2CHI1,2HOU1,2WAS'], ['DEN']]
4

2 に答える 2

4

で分割し-、次に各グループで/

[r.split('/') for r in routing.split('-')]

これは以下を出力します:

>>> routing = 'PBI-FLL/FMY/JAX/MIA/ORL-PNS/TPA-SRQ-CLE/CHI/HOU/WAS-DEN-ELP' 
>>> [r.split('/') for r in routing.split('-')]
[['PBI'], ['FLL', 'FMY', 'JAX', 'MIA', 'ORL'], ['PNS', 'TPA'], ['SRQ'], ['CLE', 'CHI', 'HOU', 'WAS'], ['DEN'], ['ELP']]

あなたの例と比較すると、それは最後に1つ余分な['ELP']エントリですが、それは見落としだったと思います。それを再び削除するのは簡単です。

于 2013-02-20T14:36:29.333 に答える
1

この問題ではやり過ぎかもしれませんが、pyparsingここではうまく機能します。

routing = 'PBI-FLL/FMY/JAX/MIA/ORL-PNS/TPA-SRQ-CLE/CHI/HOU/WAS-DEN-ELP' 

from pyparsing import *
block   = Group(delimitedList(Word(alphas), '/'))
grammar = Group(delimitedList(block, '-'))

print grammar.parseString(routing)

版画:

[[['PBI'], ['FLL', 'FMY', 'JAX', 'MIA', 'ORL'], ['PNS', 'TPA'], ['SRQ'], ['CLE', 'CHI', 'HOU', 'WAS'], ['DEN'], ['ELP']]]

ここでの利点は、文法を拡張したい場合です。通常、これらの問題は単純に始まり、時間が経つにつれて複雑になります。ここでは、構文解析から文法を分離することが役立ちます。

于 2013-02-20T14:43:12.907 に答える