2

ネストされたリスト (Yahoo ファイナンスからの過去の株価データのリスト) の値を差し引こうとしていますが、問題が発生しています。単純な減算 (高値 - 低値) を試みていますが、これを実装できません。おそらく、リストの性質に関する根本的な何かが欠けていると思いますが、困惑しています。

私が使用しているネストされたリストの例:

[['2012-07-31', '16.00', '16.06', '15.81', '15.84', '13753800', '15.8'],
 ['2012-07-30', '16.15', '16.15', '15.90', '15.98', '10187600', '15.9'],
 ['2012-07-27', '15.88', '16.17', '15.84', '16.11', '14220800', '16.1'],
 ['2012-07-26', '15.69', '15.88', '15.62', '15.80', '11033300', '15.8'],
 ['2012-07-25', '15.52', '15.64', '15.40', '15.50', '15092000', '15.5'],
 ['2012-07-24', '15.74', '15.76', '15.23', '15.43', '19733400', '15.4'],
 ['2012-07-23', '15.70', '15.81', '15.59', '15.76', '14825800', '15.7'],
 ['2012-07-20', '15.75', '15.94', '15.68', '15.92', '16919700', '15.9'],
 ['2012-07-19', '15.71', '15.86', '15.64', '15.73', '15985300', '15.7'],
 ...]

3 番目の「列」から 4 番目の「列」を減算し、結果を別のリストに入力します (順序は重要です)。これを実装する最良の方法は何ですか?

4

4 に答える 4

3

リスト内包表記を使用できます。

from decimal import Decimal
result = [(row[0], Decimal(row[2]) - Decimal(row[3])) for row in data]
于 2012-08-09T18:21:00.607 に答える
1

最初の問題は、リストに数字ではなく文字列が含まれていることです。数値を減算したい場合は、それらを数値に変換する必要があります (たとえば、floatリストを作成するときに使用します)。

データを行と列を持つテーブルとして扱い、コンポーネントごとに数値を加算および減算したいようです。そのためにnumpyは、このために設計されたライブラリである を使用する必要があります。pandasも参照してください。これは、numpy に基づいて構築され、行と列によってデータをスライスおよびダイシングするための強力な機能を提供するライブラリです。(たまたまファイルからデータを読み取る場合、これらのライブラリには、CSV ファイルなどを読み取って、データを文字列ではなく数値や日付としてインポートできるツールもいくつか用意されています。)

于 2012-08-09T18:19:13.267 に答える
1

ネイティブ Python で、ネストされたリスト (「テーブル」と呼びます。その中の各リストは「行」です) をそのまま残したい場合、相違点のリストを作成する簡潔で慣用的な方法は次のとおりです。

differences = [float(row[3]) - float(row[4]) for row in table]

そのようにdifferences[i] == table[i][3] - table[i][4]

テーブル内の数値データが他のコードで使用される場合は、テーブル内で文字列を浮動小数点数に変換することができます。

table = [[r[0], float(r[1]), float(r[2]),
         float(r[3]), float(r[4]), r[5], float(r[6])] for r in table]

差分テーブルが作成されるように

differences = [r[3] - r[4] for r in table]
于 2012-08-09T18:38:30.413 に答える
1

これを行う最善の方法は、を使用することnumpyです.pythonは大量のデータを処理するように設計されたことはありません.numpyつまり、かなりの量のサブルーチンがネイティブバイナリにコンパイルされた他の言語を使用して実装されており、加速された線形代数を使用できます.計算を本当に高速化するためのライブラリ。

簡単な例を次に示します。

>>> import numpy
>>> values = numpy.random.rand(5, 5) # 5 by 5 matrix with random values
>>> values[:, 3] - values[:, 2] # numpy is 0 index, so the fourth column is 3 and the third is 2
于 2012-08-09T18:27:50.480 に答える