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

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

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

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

解決済

指定した範囲の数値とその個数を出力したい

LiLL
LiLL

総合スコア6

Python 3.x

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

1回答

0グッド

0クリップ

261閲覧

投稿2022/11/15 09:47

編集2022/11/15 10:50

実現したいこと

test.txtのファイルの中身の数値から
0から0.2
0.2から0.4
0.4から0.6
0.6から0.8
0.8から1.0
の数値を出力とそれぞれの数値の範囲の個数のカウントをしたいです。

発生している問題・エラーメッセージ

print(list1 > my_float) TypeError: '>' not supported between instances of 'list' and 'float'

該当のソースコード

python

1 2 with open("test.txt", "r)as f: 3 print(path+".txt")  4 data=f.readlines()[1:60] 5   #↑test.txtの中身は1から60行あります 6 print(data) 7 list1=[data] 8 my_float=0.6 9 print(list1 > my_float)

test.txtの中身

0.755229
0.688727
0.660857
0.725014
0.609122
0.667595
0.664538
0.64256
0.647082
0.591497
0.55077
0.612957
0.83207
0.67802
0.701618
0.908475
0.659222
0.534892
0.661645
0.552581
0.790303
0.727885
0.69056
0.579366
0.681916
0.441917
0.626703
0.790303
0.685454
0.796727
0.728756
0.492767
0.789395
0.720935
0.582183
0.568498
0.580289
0.725347
0.740118
0.663689
0.694524
0.448931
0.764399
0.71526
0.487369
0.717317
0.600473
0.615127
0.60676
0.574313
0.378411
0.370908
0.73546
0.636587
0.847458
0.412695
0.643728
0.681713
0.5
0.593561

試したこと

まず、0.7以下の数値を取り出すことを目指しましたが上記のエラーがでます

https://bobbyhadz-com.translate.goog/blog/python-typeerror-not-supported-between-instances-of-list-and-float?_x_tr_sl=en&_x_tr_tl=ja&_x_tr_hl=ja&_x_tr_pto=sc
こちらのサイトを参考にしましたが、エラーが吐いている状態です。

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

TakaiY

2022/11/15 09:58

「test.txtの中身」が実際と異なる見た目になっていると思われます。 test.txtの中身を、ソースコードと同じように囲っていただけますか。
LiLL

2022/11/15 10:01

0.755229 0.688727 0.660857 0.725014 0.609122 0.667595 0.664538 0.64256 0.647082 0.591497 0.55077 0.612957 0.83207 0.67802 0.701618 0.908475 0.659222 0.534892 0.661645 0.552581 0.790303 0.727885 0.69056 0.579366 0.681916 0.441917 0.626703 0.790303 0.685454 0.796727 0.728756 0.492767 0.789395 0.720935 0.582183 0.568498 0.580289 0.725347 0.740118 0.663689 0.694524 0.448931 0.764399 0.71526 0.487369 0.717317 0.600473 0.615127 0.60676 0.574313 0.378411 0.370908 0.73546 0.636587 0.847458 0.412695 0.643728 0.681713 0.5 0.593561 このようになっています
TakaiY

2022/11/15 10:06

質問は編集できるので、ここではなく、質問に追記してください。
LiLL

2022/11/15 10:53

修正しました

回答1

0

ベストアンサー

pythonは初心者とお見受けしますが、この処理をpythonで書いているのはなぜですか?
pythonの勉強ということであれば続けてもいいと思いますが、業務であればまずは別の方法を模索すべきと思います。

pythonの勉強を兼ねるのであれば、まずは、pythonの初歩の書籍などを一通りやって内容を理解するのをお勧めします。

以下、コメントです。
■ data=f.readlines()[1:60]
これはどのような意図で書いていますか?

■ list1=[data]
これは、リストであるdataをさらにリストに入れてlist1として参照できるようにしていますが、意図どおりですか?

■ print(list1 > my_float)
エラーにあるようにリスト(list1)と浮動小数(my_float)を比較しているのでエラーになります。読み込んだデータの値を比較したいのだと思いますが、比較の対象が間違えています。
また、比較した結果をprintしようとしていますが、作っている途中だからでしょうか。


追記
「data=f.readlines()[1:60]」の [1:60]は不要です。 長いリストから一部を取り出すために使う構文です。また、 リストのインデックスは0始まりですから、これでは先頭の行が抜けてしまいます。

この段階で、 dataは以下のようなリストになっています。
['0.755229\n', '0.688727\n', '0.755229\n', '0.688727\n', ....]
すでにリストになっているのでここで加工する必要はありません。 ただし、1) 文字列として読み込まれていること 2) 末尾に改行文字が付いていること に注意が必要です。

以降の処理 はすべて変更で、この後、
■ 結果格納用の空のリストを作る。 必要分だけ。(「まず、0.7以下の数値を取り出すことを目指」すのであれば1つだけ)
■ リストから1つずつ取り出すループを始める
■■ 末尾の改行を取り除く
■■ 文字列を数値に変換する
■■ 条件判定 (「まず、0.7以下の数値を取り出すことを目指」すのであれば1つだけ)
■■■ あてはまれば結果格納用のリストに追加
■ ループが終れば必要であれば結果を出力

まあ、こんな感じでできるでしょう。
各要素については、検索すればやりかたは出ています。

投稿2022/11/15 10:05

編集2022/11/15 11:28
TakaiY

総合スコア10467

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

LiLL

2022/11/15 10:50 編集

■ data=f.readlines()[1:60] これはどのような意図で書いていますか? 他サイトで指定した範囲の行を出力できると記載されてたので、そちらを利用しました。 ■ list1=[data] これは、リストであるdataをさらにリストに入れてlist1として参照できるようにしていますが、意図どおりですか? ご指摘の通り初心者なので、その認識はなかったです。意図通りではないです。 ■ print(list1 > my_float) エラーにあるようにリスト(list1)と浮動小数(my_float)を比較しているのでエラーになります。読み込んだデータの値を比較したいのだと思いますが、比較の対象が間違えています。 また、比較した結果をprintしようとしていますが、作っている途中だからでしょうか。 はい、作っている途中です。 listと浮動小数を比較してエラーがでる点は そもそも読み込んだデータの値をリストにいれていることが間違いないですか?

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Python 3.x

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