質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

240閲覧

一つだけ要素の変わる同様の処理をループさせたい

aine_

総合スコア22

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/11/30 05:58

編集2018/11/30 07:11

環境はpython2.7、windows10でanacondaを使用しています。
以下のようなコードで、四角柱の構造物にはたらくモーメントを高さごとに切り分けて計算したいのですが、for文でループさせる方法がわかりません。
hdfファイルには粒子法という構造物のある範囲に微小な粒子をつめこみ計算するというプログラムの計算結果がはいっていて、x,y,z座標とそれぞれの点(格子)での圧力がはいっています。

python

1 2 3import h5py 4import numpy as np 5import matplotlib.pyplot as plt 6 7#hdfファイルから位相と圧力をもってくる 8hdf5 = h5py.File("file.hdf5", 'r') 9list_x=(hdf5["particles/obstacle/arrays/x"].value.tolist()) 10list_y=(hdf5["particles/obstacle/arrays/y"].value.tolist()) 11list_z=(hdf5["particles/obstacle/arrays/z"].value.tolist()) 12list_p=(hdf5["particles/obstacle/arrays/p"].value.tolist()) 13 14#位相の条件分け 15z_1 = [i for i, takasa in enumerate(list_z) if 0.020>=takasa] 16z_2 = [i for i, takasa in enumerate(list_z) if 0.040>=takasa>0.020] 17z_3 = [i for i, takasa in enumerate(list_z) if 0.060>=takasa>0.040] 18x_1 = [i for i, x in enumerate(list_x) if 4.93>=x] 19x_2 = [i for i, x in enumerate(list_x) if 5.09>=x>=5.07] 20 21#一番下の段について前面と背面の位相をだす 22zenmen_1 = set (z_1) & set (x_1) 23haimen_1 = set (z_1) & set (x_2) 24 25#それぞれの条件の位相で圧力をもってくる 26p_zenmen_1 = [list_p[i] for i in zenmen_1] 27p_haimen_1 = [list_p[i] for i in haimen_1] 28 29#圧力をモーメントにする 30p_goukei_1 = sum(p_zenmen_1)-sum(p_haimen_1) 31mo1 = p_goukei1*0.01 32 33#2段目について同様の処理 34zenmen_2 = set (z_2) & set (x_1) 35haimen_2 = set (z_2) & set (x_2) 36 37p_zenmen_2 = [list_p[i] for i in zenmen_2] 38p_haimen_2 = [list_p[i] for i in haimen_2] 39 40p_goukei_2 = sum(p_zenmen_2)-sum(p_haimen_2) 41mo2 = p_gouke2*0.03 42#3段目以降省略

考える方向に圧力のかかっている前面と背面のみを抽出し、その圧力を合計し、高さごとにモーメントの式にいれたいのですが繰り返しにする方法がわかりません。稚拙な質問なのは重々承知ですが方法だけでもよいのでどなたかご教授ください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Lhankor_Mhy

2018/11/30 07:08

zyouso_1 zyouso_2 はどこかここに書かれていないコードで定義されているのですか?
aine_

2018/11/30 07:10

すみません、z_1,2の写し間違いです
Lhankor_Mhy

2018/11/30 07:15

とすると、z_1 z_2 z_3 は必ず存在するのですね? そして z_4 が存在することはない、と理解してよろしいですか?
aine_

2018/11/30 07:18

z_1,z_2,z_3は存在します。このコードでは省略していますがz_100くらいまで処理したいです。
aine_

2018/11/30 07:19

構造物に上限は設定しているためzも上限はあります。無限に続くことはないです。
Lhankor_Mhy

2018/11/30 07:23

z_n をリストにしてループを回せばいいように思うのですが、何か障害がありますか?
aine_

2018/11/30 07:26

ありがとうございます。リストでできました。浅学であるため連番のファイル読み込みにつかう%(i)などと同じ処理ができるのではと勘違いしていました。
guest

回答1

0

自己解決

リストでできました。無知をさらして申し訳ない。

投稿2018/11/30 07:48

aine_

総合スコア22

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問