それで、リストのリストを作成したい...空のリストから始める必要があります
list_of_lists = []
次に、ファイルの内容を1行ずつ読み取ります
with open('data') as f:
for line in f:
inner_list = [elt.strip() for elt in line.split(',')]
# in alternative, if you need to use the file content as numbers
# inner_list = [int(elt.strip()) for elt in line.split(',')]
list_of_lists.append(inner_list)
一般的な使用例は列データの場合ですが、ストレージの単位はファイルの行であり、1つずつ読み取ったため
、リストのリストを転置したい場合があります。これは、次のイディオムで実行できます
by_cols = zip(*list_of_lists)
別の一般的な用途は、各列に名前を付けることです
col_names = ('apples sold', 'pears sold', 'apples revenue', 'pears revenue')
by_names = {}
for i, col_name in enumerate(col_names):
by_names[col_name] = by_cols[i]
同種のデータ項目を操作できるようにする
mean_apple_prices = [money/fruits for money, fruits in
zip(by_names['apples revenue'], by_names['apples_sold'])]
私が書いたもののほとんどはcsv
、標準ライブラリのモジュールを使用して高速化できます。もう1つのサードパーティモジュールはですpandas
。これにより、一般的なデータ分析のほとんどの側面を自動化できます(ただし、多数の依存関係があります)。
更新 Python 2 zip(*list_of_lists)
ではリストの別の(転置された)リストが返されますが、Python 3では状況が変更され、添え字付きでないzipオブジェクトがzip(*list_of_lists)
返されます。
インデックス付きアクセスが必要な場合は、使用できます
by_cols = list(zip(*list_of_lists))
Pythonの両方のバージョンのリストのリストが表示されます。
一方、インデックス付きアクセスが不要で、列名でインデックス付けされたディクショナリを作成するだけの場合は、zipオブジェクトで十分です...
file = open('some_data.csv')
names = get_names(next(file))
columns = zip(*((x.strip() for x in line.split(',')) for line in file)))
d = {}
for name, column in zip(names, columns): d[name] = column