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

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

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

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

Q&A

解決済

3回答

738閲覧

python 格納された値がブランクならば別の値を代入するif/else文を作りたい

MM2

総合スコア8

Python

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

0グッド

0クリップ

投稿2019/12/04 07:50

編集2019/12/09 06:42

以下のコードにおけるmaxidに格納された値がブランクの場合は0を、そうでない場合にはmaxidを、xlistに追加する、というコードを書きたいと考えています。

ですが、中身がブランクかどうかが以下のどちらのコードでは読み取れず、maxidがブランクのまますべてelse文に対応してしまいます。
この場合、どのようにブランク判定を行えばよいでしょうか?

※maxidはtuple
maxidがブランクの状態とは、print(maxid)で表示すると以下のようなコードで表示されていることを指しています
(array([], dtype=int64),)

ご指導よろしくお願いいたします。

python

1xlist =[] 2st = '' 3if maxid==st : 4 xlist.append(0) 5else : 6 xlist.extend(maxid)

python

1xlist =[] 2tuple = () 3if maxid==tuple : 4 xlist.append(0) 5else : 6 xlist.extend(maxid)

新しく試したコード
皆様のアドバイスを頂き、以下のコードについても試しましたが上記の流れを実現できていません;
沢山のアドバイスを頂いているにもかかわらず、申し訳ありません。m(__)m

python

1xlist.extend(maxid or [0]) 2出力:ところどころがブランクになっていた値がデータセットの中間あたりにまとまって表示されるようになった

python

1if not maxid[0]: 2 ... 3出力:xlist内全てが0

python

1a = np.array([0]) 2if not maxid[a]: 3  ... 4エラー:only integer scalar arrays can be converted to a scalar index

python

1a = np.array([]) 2if not maxid[a]: 3  ... 4エラー:only integer scalar arrays can be converted to a scalar index

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

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

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

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

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

LouiS0616

2019/12/04 07:57 編集

maxidの型は何ですか? ...あ、『tupleで与えられています』ってmaxidがタプルってことですか。 いちおうtype(maxid)などで確認してみていただけますか。
MM2

2019/12/04 07:58

書き方がわかりにくく申し訳ありません、、 type(maxid)で確認したところ、tupleと表示されています。
meg_

2019/12/04 10:51

「maxidがブランク」とは具体的にはどんな状態でしょうか?
MM2

2019/12/04 11:00

maxidはパワースペクトルのピークを求めた値が入るのですが、スペクトルに指定したピークがなかった場合何も値が格納されない、という状態にあるようです。このようなお返事で大丈夫でしょうか?言葉足らずで申し訳ありません。
t_obara

2019/12/04 11:29

maxid[0] is None とか?
meg_

2019/12/04 11:43

コード中で「maxid」の値をprint()等で確認してください。空のタプルでもNGだとすると、実際の値を確かめた方が良いです。
MM2

2019/12/04 12:04

t_obara様 ありがとうございます、試してみます! meg_様 以前csvに落として確認したところ何も入っていない状態でした。printfでの確認は明日してみます!ありがとうございます。
MM2

2019/12/06 07:18

遅くなり申し訳ありません。 print(maxid)で確認したところ、ブランクの前後はこのようになっていました。 (array([1], dtype=int64),) (array([4], dtype=int64),) (array([2], dtype=int64),) (array([4], dtype=int64),) (array([2], dtype=int64),) (array([1], dtype=int64),) (array([], dtype=int64),) (array([1], dtype=int64),)
meg_

2019/12/06 09:11

ブランクのときにはどのように表示されますか?
MM2

2019/12/06 09:19

上記の下から二行目のような状態で表示されています。
MM2

2019/12/06 09:21

もしくは、他の見方がありますでしょうか??
meg_

2019/12/06 10:58

空のタプルではなく、空のarrayが入ったタプルですね。 LouiS0616さんご提案の方法で上手くいくかと思います。
MM2

2019/12/09 06:18

空のarrayが入っている状態と空のタプルは違うのですね。 教えていただきありがとうございます! LouiS0616様ご提案の方法で行ったところ、すべて0が格納される結果となってしまいました。
guest

回答3

0

以下のコードで実現することが出来ました!
皆様、アドバイスありがとうございましたm(__)m

python

1if maxid[0].size == 0 : 2  空の値だった時の処理~ 3else : 4 …

投稿2019/12/09 08:09

MM2

総合スコア8

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

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

0

ベストアンサー

(array([], dtype=int64),)

それは空のタプルではなく要素数1のタプルです。
内部にあるのはおそらくNumPyアレイでしょう。

Python

1if not maxid[0]: 2 ...

これで上手くいきませんか。

投稿2019/12/06 09:45

LouiS0616

総合スコア35660

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

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

MM2

2019/12/09 06:11

回答ありがとうございます! 要素1としてカウントされるのですね。 if not maxid[0]: xlist.extend(maxid) else : xlist.append(0) で実行したところ、xlistにすべて0が格納されてしまいました;
MM2

2019/12/09 06:30 編集

Numpyアレイで0の値が入っていると伺い、以下のように試しましたがエラーが出ています。 a = np.array([0]) if not maxid[a]:   … エラー:only integer scalar arrays can be converted to a scalar index a = np.array([]) if not maxid[a]:   … エラー:only integer scalar arrays can be converted to a scalar index お手数をおかけし恐縮ですが、別の手法がありましたら教えていただけると幸いです。m(__)m
LouiS0616

2019/12/09 11:26

あ、確かにそのようなエラーを吐きますね。確認不足でした。 自己回答されているように size 属性を見ても良いでしょうし、len(maxid[0]) を利用しても良いでしょう。
MM2

2019/12/10 05:22

コメントありがとうございます! 教えていただいた方法も試した所、希望通り動作できていることが確認できました。
guest

0

python

1xlist.extend(maxid or [0])

python

1>>> () or [0] 2[0] 3>>> (1, 2, 3) or [0] 4(1, 2, 3)

投稿2019/12/04 11:59

編集2019/12/04 12:03
shiracamus

総合スコア5406

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

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

MM2

2019/12/04 12:05

回答ありがとうございます! 試してみます!
MM2

2019/12/06 07:17 編集

試したところ、 Wrong number of items passed 0, placement implies 1 とのエラーが返ってきました。m(__)m 上記エラーについては別のリストに値が入っていないことが影響しており、その点を考慮した所実行されました。 しかし、今までバラバラに入っていたブランクのデータがリストの中間に20個まとまって表示されるようになりました。データをお見せしないことには難しいと思うのですが、、
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問