Pythonで数値のリストを合計する
1,2,3,4,5...]といった数字のリストがあり、
(1+2)/2、2番目は
(2+3)/2と3番目は計算したいのです、 (3+4)/2
、といった具合に。どうすればいいのでしょうか?
1番目の数字と2番目の数字を合計して2で割り、2番目の数字と3番目の数字を合計して2で割る、というようなことをしたいです。
また、数字の羅列を合計するにはどうしたらいいのでしょうか?
a = [1, 2, 3, 4, 5, ...]
そうなんですか:
b = sum(a)
print b
を1つの数字にするのか?
これは私には使えません‼。
342
20
質問1:(要素0+要素1)/2、(要素1+要素2)/2、...などとしたいわけですね。
最初の要素を除くすべての要素からなるリストと、最後の要素を除くすべての要素からなるリストの2つを作る。そして、欲しい平均値は、2つのリストから取り出した各ペアの平均値である。2つのリストからペアを取り出すには、
zip
を使用する。入力値が整数であるにもかかわらず、結果に小数を表示させたいのだと思います。Pythonのデフォルトでは、整数の除算を行います:余りを捨ててしまうのです。ずっと割り切るには、浮動小数点数を使う必要があります。幸い、intをfloatで割るとfloatになるので、除数には
2
の代わりに2.0
を使うだけです。このように
質問2:
sum`のその使い方は、問題なく動作するはずです。以下は動作します:
また、途中のすべてのステップで、すべてを変数に代入する必要はありません。print sum(a)` で十分です。
何を書いたのか、どううまくいっていないのか、より具体的に説明する必要があります。
数字の羅列を和訳する:
リスト理解]1を使って、nとn - 1の半分を計算する(パターンが正しければ):
reduce]2 と lambdas を使って、((1 + 2) / 2) + ((2 + 3) / 2) + ...など、隣接する要素を合計します。
質問2:。 整数のリストを合計するには:
リストに文字列として整数が含まれている場合:
この方法で試すことができます。
sum
はコードのどこかで定義されており、デフォルトの関数を上書きしているようです。 削除して問題が解決しました。単純な「リスト理解」と「合計」を使用する:
すべての回答は、プログラム的かつ一般的なアプローチを示していました。 私はあなたのケースに固有の数学的アプローチを提案します。 特に長いリストの場合、より高速になる可能性があります。 リストが
n
までの自然数のリストであるため、機能します。自然数
1、2、3を持っていると仮定します。 ...、10
:リストで「合計」関数を使用できます。
式
n *(n + 1)/ 2
を使用することもできます。ここで、n
はリストの最後の要素の値です(ここではnat_seq [-1]
)。そのため、要素に対する反復を避けます。:シーケンス
(1 + 2)/ 2、(2 + 3)/ 2を生成します。 ...、(9 + 10)/ 2
ジェネレーターと式(2 * k-1)/ 2を使用できます。
(値を浮動小数点にするには、ドットに注意してください)。 新しいリストを生成するときは、最初の要素をスキップする必要があります。ここでも、そのリストの「合計」関数を使用できます。
ただし、式
(((n * 2 + 1)/ 2)** 2-1)/ 2
を使用することもできるため、要素に対する反復を避けることができます。この問題を解決する最も簡単な方法:
初心者のために簡単にしましょう:-。
1。
global
キーワードを使用すると、新しいローカル変数を生成せずに、グローバル変数メッセージをメイン関数内に割り当てることができます。この概念はシャドウイングと呼ばれます。
2。 Pythonで数値のリストを合計します。
出力= 15 。
短くて簡単:
そして、これがどのように見えるかです。
Pythonが2つのリストで「マップ」を処理する方法にはある程度の愚かさがあるため、リスト「a [:-1]」を切り捨てる必要があります。
itertools.imap
:を使用すると、期待どおりに機能します。pairwise
itertools recipesの使用:発電機はこれを書くの簡単な方法です:
「while」ループを使用して結果を取得します。
リストの要素をループし、次のように合計を更新します。
1。 要素iとi + 1の平均を持つ新しいリストが必要です。 2。 リストの各要素の合計を希望します。
匿名関数を使用した最初の質問(別名. ラムダ関数):
。 s =ラムダl:[(l [0] + l [1])/ 2。] + s(l [1:])len(l)> 1の場合、[]#結果をフロートとして希望する場合。 s =ラムダl:[(l [0] + l [1])// 2] + s(l [1:])len(l)> 1の場合[]#床の結果が必要な場合。
。2番目の質問も匿名関数(別名. ラムダ関数):
。 p =ラムダl:l [0] + p(l [1:])lの場合。!= []その他0。
。両方の質問を1行のコードで組み合わせる:
。 s =ラムダl:(l [0] + l [1])/ 2。 + s(l [1:])len(l)> 1の場合、0#結果をfloatとして希望する場合。 s =ラムダl:(l [0] + l [1])/ 2。 + s(l [1:])len(l)> 1の場合、0#フロア結果が必要な場合。
。 ニーズに最適なものを使用してください。map()でラムダを使用します。
itertoolsの精神で。 ペアワイズレシピからのインスピレーション。
例:
リスト理解力を使ってみてください。みたいな感じで: