つまり、リストのリストを作成したいのです...空のリストから始める必要があります
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)
もう 1 つの一般的な用途は、各列に名前を付けることです。
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 2zip(*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