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

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

新規登録して質問してみよう
ただいま回答率
85.46%
多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

リストボックス

ユーザーがリストから1つ以上のアイテムを選択できるようにするGUI要素です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

2回答

989閲覧

[python]リストから条件に一致する要素のみを取り出し,別のリストにappendしたい

oinari03

総合スコア59

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

リストボックス

ユーザーがリストから1つ以上のアイテムを選択できるようにするGUI要素です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2021/10/28 09:17

前提・実現したいこと

リストから条件に一致する要素のみを取り出し,別のリストにappendしたい

変数の説明

next_point : keyが格納された配列

new_distance_sorted: (key,distance)のタプルを格納したリストでdistanceでソートした順番になっている

next_point = [625,1010] new_distance_sorted = [(1010, 0.0), (3896, 0.0), (16720, 0.0), (625, 9.999999974752427e-07), (731, 9.999999974752427e-07), (742, 9.999999974752427e-07), (753, 9.999999974752427e-07), ..... ]

該当のソースコード

やりたいこととしては,next_pointにあるkeyと一致していない かつ distanceが0.0でない条件のkeyを次のnext_pointにappendしたい.
この条件を満たすのは,new_distance_sortedを見れば明らかで,"731"がappendされることがわかるが,プログラム側で判別させたい.

next_point = [625,1010] flag = False for i,data in enumerate(new_distance_sorted): for j in next_point: if data[0] != j and data[1] != 0.0: flag = True next_point.append(data[0]) break if flag: break print(next_point)

上記コード
print(next_point)の結果:
[625, 1010, 625]

試したこと

python側であまりにも小さい数を0.0と一致したものと満たしてしまうのかと思って確認したが,しっかりと別の値だと認識できていた.

if 9.999999974752427e-07 == 0.0: print("Yes") else: print("No") #No

なぜ,625が出てきてしまうのかわからない,orやらと試してみたがもちろんうまくいかなかったです.
どうかご指摘よろしくお願いします.

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

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

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

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

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

1T2R3M4

2021/10/28 09:46 編集

data[0]=625, j=1010 の時はどうなるのでしょうか。
guest

回答2

0

以下のプログラムで解決しました.
ありがとうございます.

for i,data in enumerate(new_distance_sorted): if data[0] not in next_point and data[1] != 0.0: next_point.append(data[0]) break

投稿2021/10/28 09:57

oinari03

総合スコア59

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

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

0

ベストアンサー

  • なぜ,625が出てきてしまうのかわからない,

i==3, data==(625, 9.999999974752427e-07), j==1010のときに、

if data[0] != j and data[1] != 0.0: が成り立つので、

next_point.append(data[0]) されて

ループが終了するからです。

  • プログラム側で判別させたい.

演算子 in を使いましょう。

投稿2021/10/28 09:45

編集2021/10/28 09:49
ppaul

総合スコア24666

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

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

oinari03

2021/10/28 09:57

ご指摘ありがとうございます.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問