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

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

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

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

Q&A

解決済

3回答

774閲覧

python if文 listをint型に変換

shiro55

総合スコア9

Python

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

0グッド

1クリップ

投稿2020/02/21 11:39

初心者のため、いろんなサイトを参考にしながらプログラミングを勉強しつつ書いていますが、どうしてもうまくいかず質問させていただきます。
testtext.txtの中身は0~10の数字が入っていますが、変数search_wordに収納したのち数字を2個ずつ出力し、出力した数字を削除して最後まで出力したら終了という形にしたいです。

search_wordより1と2を出力し、その値を削除するまではこちらの力を借りなんとか辿り着きましたが、if文で変数を最後まで出力させようとしたところエラーになりました。

File "<ipython-input-26-e9f795ded3d8>", line 1

if search_word = [[int(i1) for i1 in search_word]]>2 ^

SyntaxError: invalid syntax

if文でsearch_word>2としたいのですが、list型とint型で比較が出来ないため、とあるサイトを参考に
search_word = [int(i1) for i1 in search_word]>2とsearch_wordをint型に変換する処理をしてみましたが出た結果がyntaxError: invalid syntaxでした。

python

1f = open(r"C:\Users\user\Desktop\testtext.txt", "r") # IDファイルを読み込み 2search_word = f.read().split('\n') # ファイルの中身を変数IDへ 3f.close() # ファイルを閉じる 4 5print (search_word) 6print(type(search_word)) 7 8# 実行結果 9['1', '2', '3', '4', '5', '6', '7', '8', '9', '10'] 10<class 'list'> 11 12for i in search_word[0:2]: 13 print (i) 14# 実行結果 151 162 17print(type(search_word)) 18# 実行結果 19<class 'list'> 20 21del search_word [0:2] 22search_word 23# 実行結果 24['3', '4', '5', '6', '7', '8', '9', '10'] 25 26# ここまでOK 27 28if search_word = [int(i1) for i1 in search_word]>2 29 for i1 in search_word[0:2]: 30 print (i1) 31 del search_word [0:2] 32elif search_word = [int(i2) for i2 in search_word]>2 33 for i2 in search_word[0:2]: 34 print (i2) 35 del search_word [0:2] 36elif search_word = [int(i3) for i3 in search_word]>2 37 for i3 in search_word[0:2]: 38 print (i3) 39 del search_word [0:2] 40elif search_word = [int(i4) for i4 in search_word]>2 41 for i4 in search_word[0:2]: 42 del search_word [0:2] 43 print (i4) 44else: 45 search_word = [int(i5) for i5 in search_word]<2 46 for i5 in search_word[0:2]: 47 print (i5) 48コード

参考にさせてもらったサイトでは
ls = ["10", "20", "30", "40", "50"]
print(ls)

ls = [int(i) for i in ls] # ここでリストの中の値をint型へ変換しています。 print(ls)

とlist型をint型に変換していたため、同じように構築してみましたが、IF文の中で型を変更する事が出来ないのでしょうか?それとも構文の書き方を間違えてるのでしょうか?

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

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

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

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

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

hiro-k

2020/02/21 12:13

「if文でsearch_word>2としたい」は具体的には何と2を比較したいのですか? search_word の要素数ですか? それともsearch_word の中身の値ですか?
hayataka2049

2020/02/21 19:53

情報の出典を追加してください。
quickquip

2020/02/22 00:36 編集

['1', '2', '3', '4', '5', '6', '7', '8', '9', '10'] を処理してどういう結果が欲しいのかを書いた方がいい(というか書かれていないのがいちばん駄目な点)かと思います。
shiro55

2020/02/22 01:04

ご回答ありがとうございます。 まとめての回答にて失礼します。 情報の出展に関して知識不足でして、指摘いただきまして感謝します。 遠藤貴大様の【基礎をマスターしよう!】Pythonで文字列を数値に変換する方法:https://www.sejuku.net/blog/70194を参考とさせていただきました。 search_wordには1~10の数字が入っており、2個ずつ数字を抽出、抽出した数字は削除、search_word内にまだ数字が残っている間は同じ処理を繰り返し最終的にsearch_wordの中身が空になるまで繰り返すという結果を求めています。 そのため、search_word内の要素の数が2個以上か2個以下かを比較したいです。
guest

回答3

0

きれいに回答をまとめられなかったので、雑多なコメントの羅列にします。


初心者は「いろんなサイトを参考にしながらプログラミングを勉強」してはいけません。

検索することは確かに初心者でもできますが(いえ、実際にはできない人もいるので、検索ができるなら誇っても良いです)、それで出てきた情報が正しいのかどうか、自分の状況に合致しているのかどうか、そのページはどういう意図で何を書いているのか……を判断できるのは一定以上のスキルがある人だけです。

体系的に学ぶのに適した教材を見つけて、しっかり取り組んでください。書籍、オンライン講座、動画、いろいろなものがあります。
(残念ながら8割は「ハズレ」です。ということは、期待値で考えるなら5つ買えば「ハズレ以外」が1つ含まれます)


常識的なことですが、他サイトの内容を書くなら正式に引用しましょう。出典を特定できる形になっているならともかく、なぜわざわざ「とあるサイト」「参考にさせてもらったサイト」とぼかしてしまうのかわかりません。引用要件の「出所の明示」を満たさない以上は引用として扱えず、剽窃とみなされます。


一番伝えるべきことは伝えましたが、以下はプログラムの内容に関するコメントです。


二個ずつ出力しなくても結果は同じだし、リストの中身を削除しなくてもやはり同じです。単にすべての要素に渡ってループさせてprintすれば良い。

あえて、リストの中身を先頭2個ずつ表示して削除するという動作を繰り返すというプログラムを書いてみる、ということが目的なら構いません。


ひと連なりのif-elif-elseにしている時点で、各ブロックのうちのいずれか一つしか実行されないのだけど、それでいいのかしら。


Pythonでは=は代入文を表し、文は構文上制約が多いです(他の文の中に埋め込んで書いたりはできない)。

比較演算子の==を使うつもりで=を使っているのかとも思いましたが(これはよくある間違いなので)、それ以前の問題で、参考サイトをそのままコピペしているんですね。


そこで「search_wordをint型に変換する処理」と書いてあるのは、search_word「の要素」をint型に変換する処理です。どこかは知りませんが元コードのコメントにも# ここでリストの中の値をint型へ変換しています。と書いてありますから、これを混同したのは質問者さんの錯誤です。


一般に、listintに変換することはできません。変換するというのは、同質の情報を含んだまま(この定義は色々あり得ますが)別のクラスで表現することです。listの複雑な構造をintで表すことはできないでしょう。


長さを取得したいならlenです。

投稿2020/02/21 20:27

hayataka2049

総合スコア30935

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

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

shiro55

2020/02/22 01:26

>初心者は「いろんなサイトを参考にしながらプログラミングを勉強」してはいけません。 これは勉強し始めて確かに!!と思っています。 書籍から入りましたが、例文でもエラーが出たり各内容において触りのみだったりと教材選びからしっかりと考え直そうと思っているところです。 現在、やり掛けている事だけはなんとか完成させて再度勉強に戻りたいです。 プログラムに関するコメントについては何度も見返して理解を深めていきます。おっしゃる通り、 また出所の明示の件ご教示ありがとうございます。 知識不足で不快な思いをさせ申し訳ありません。
guest

0

ベストアンサー

数字を2個ずつ出力し、出力した数字を削除して最後まで出力したら終了という形にしたいです。

注目すべきなのは、リストの要素の型(strintか)ではなく、リストの要素数です。
要素数はlen(リスト)で取得できますので、以下のようなコードで実現できます。

Python

1for total in [10,11]: # 10個と11個のリストでテスト 2 3 # テストデータ作成 4 search_word = [str(i+1) for i in range(total)] 5 print(search_word) 6 7 # 先頭2個ずつprintした後に削除していく 8 while True: 9 lst_len = len(search_word) # 現在の要素数 10 cur_len = min(lst_len, 2) # 出力、削除する要素数。2個未満なら1個としたいので小さい方を採用する 11 12 # 出力、削除すべき要素数がないので終了 13 if cur_len <= 0: 14 break 15 16 # 先頭2個の要素をprint 17 print('-----') 18 for i in search_word[0:cur_len]: 19 print(i) 20 21 # 先頭2個の要素を削除 22 del search_word[0:cur_len] 23 24 print('=====') 25 print(len(search_word)) # 0

投稿2020/02/21 12:14

can110

総合スコア38341

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

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

shiro55

2020/02/22 01:45

ご回答ありがとうございます。 ご指摘いただくまで、リストの要素数に目が向いていませんでした。 比較演算子の比較対象を間違えていた時点でダメですね。 実行結果で望んだ結果が得られました!! 何度も見返して各プログラムの意味をしっかり理解したうえで使わせていただきます。
guest

0

初心者のため、いろんなサイトを参考にしながらプログラミングを勉強しつつ書いていますが

他の方も書いていますが、基本をマスターできていないうちは、この勉強方法は間違っています。
まだプログラミングやPythonに入門しきれてない感じです。
入門書を1冊読み、基本をマスターしてから、ウェブでの検索を始めましょう。

投稿2020/02/22 01:50

otn

総合スコア85901

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問