ドキュメントから抜粋した以下は、正規表現メソッド findall がどのように機能するかを示すスニペットであり、リストが返されることを確認しています。
re.findall(r"\w+ly", text)
['carefully', 'quickly']
IndexError: list index out of range
ただし、次のコード フラグメントでは、findall によって返されるリストの 0 番目の要素にアクセスしようとすると、範囲外エラー ( ) が生成されます。
関連するコード フラグメント:
population = re.findall(",([0-9]*),",line)
x = population[0]
thelist.append([city,x])
なぜこれが起こるのですか?
いくつかの背景として、そのフラグメントがスクリプト全体にどのように適合するかを次に示します。
import re
thelist = list()
with open('Raw.txt','r') as f:
for line in f:
if line[1].isdigit():
city = re.findall("\"(.*?)\s*\(",line)
population = re.findall(",([0-9]*),",line)
x = population[0]
thelist.append([city,x])
with open('Sorted.txt','w') as g:
for item in thelist:
string = item[0], ', '.join(map(str, item[1:]))
print string
編集:これが起こった理由の背景については、以下のコメントを読んでください。私の簡単な修正は次のとおりです。
if population:
x = population[0]
thelist.append([city,x])