2016-03-28 7 views
-2

私は別の名前のリストを持っています。リストから名前をプリントアウトするスクリプトがあります。正規表現を適用してリスト内で最も高い数字を見つける

req=urllib2.Request('http://some.api.com/') 
req.add_header('AUTHORIZATION', 'Token token=hash') 
response = urllib2.urlopen(req).read() 
json_content = json.loads(response) 
for name in json_content: 
    print name['name'] 

出力:

Thomas001 
Thomas002 
Alice001 
Ben001 
Thomas120 

私は名前トーマスに付属している最大の番号を見つける必要があります。 "Thomas"を含むすべての要素に対してregexpを適用してmax(list)を適用する簡単な方法はありますか?私が思いついた唯一の方法は、リストの各要素を調べ、Thomasのregexpにマッチさせてから文字を取り除き、残りの数字を新しいリストに入れることです。

答えて

2

正規表現は必要ありません。ソートする必要はありません。あなたが言ったように、max()は大丈夫です。

names = ((x['name'][:6], x['name'][6:]) for x in json_content) 
max(int(b) for a, b in names if a == 'Thomas' and b.isdigit()) 

最初の割り当てはジェネレータ式を作成し、その最大値を見つけるためのシーケンスの上に一つだけのパスが存在します。リストには、「Thomasson123」のような名前が含まれている場合には安全のためには、使用することができます。

+0

乾杯、私はこれで私の方法を働かせると思う。たとえ私があなたのソリューションを適用しても、 "Thomas"で始まる最も高い数字が100を超えていても、私は "9"を表示します。 –

+0

@SarunasUrbelis数字がゼロであると仮定しました。最大値をとる前に文字列をintにキャストすると修正されます。更新された答えをご覧ください。 – arekolek

2

あなたは正規表現のために行く必要はありません。結果をリストに保存してから、sortedの機能を適用してください。

>>> l = ['Thomas001', 
'homas002', 
'Alice001', 
'Ben001', 
'Thomas120'] 
>>> [i for i in sorted(l) if i.startswith('Thomas')][-1] 
'Thomas120' 
関連する問題