Pythonリストの要素を入力して表示する方法

このQ&Aのポイント
  • Pythonでリストの要素を入力し、表示する方法について困っています。
  • 質問文章のコードを試してみましたが、うまく動作しませんでした。
  • コメントで間違っているところを指摘していただき、正しい書き方を教えていただきたいです。
回答を見る
  • ベストアンサー

理解できず困ってます。

6回改行された文字列を入力した場合に、文字列をリストで表示したいのですが、 こんな感じで書いてみましたが、動作しません。。。 (’後のコメントで間違っているところも指摘いただきどうすればよいかご教示いただないでしょうか。。)             ’下記は私の認識及び、こうなっている?と思っていること mylist = []        ’リストの宣言? for i in range(5):     ’入力される文字列をiでカウント val = input()      ’入力される文字列をvalに代入 if val !='':      ’文字列が入力された場合 mylist[i] = val   ’i要素にvalを代入(文字列 ⇒ ['文字列']のイメージ) i = i + 1      ’iのカウントアップ else:        ’文字列が何も入力されてない場合 break      ’ifループを抜ける next          ’for文ループ print(mylist)       ’['文字列[0]','文字列[1]','文字列[2]','文字列[3]','文字列[4]','文字列[5]']を表示

  • Python
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • Proof4
  • ベストアンサー率78% (151/192)
回答No.2

No.1の補足コメントに対して回答します。 appendは添字ではありません。appendはリストに要素を追加する、リストデータ型のメソッドです。 mylist.append(None)は、mylistの末尾に新たにNoneという要素を追加します。 つまり、 mylist = ['a', 'b', 'c'] というリストがあった場合、mylist.append('d')をすると mylist = ['a', 'b', 'c', 'd'] となります。

参考URL:
https://docs.python.org/ja/3/tutorial/datastructures.html#data-structures

その他の回答 (1)

  • Proof4
  • ベストアンサー率78% (151/192)
回答No.1

3個所修正すべき点があるので挙げます。 1. 配列の定義と代入 mylistは要素数が指定されていないため、mylist[i]での代入は無効です。 あらかじめ要素数を指定して初期化しておくか、appendで追加する必要があります。 2. iのカウントアップ for文で自動でカウントアップされるのでi = i + 1のカウントアップは不要です。 3. 不要なコード breakではforループを脱出してしまいます。if文からの脱出は何もする必要がありません。また、nextはPythonでは不要です。 以上を踏まえたうえでコードを修正すると下記のようになります。 mylist = [None for i in range(5)] for i in range(5):  val = input()  if val != '':   mylist[i] = val print(mylist) ※OKWAVEの仕様上、インデントを全角スペースで表現しています。コピペの際はご注意ください。 mylist = [None for i in range(5)]で配列を初期化していますが、ここではリスト内包表記というものを利用しています。この処理は mylist = [] for i in range(5):  mylist.append(None) と等価です。

the-man
質問者

補足

appendは、添え字という認識をしていますが、 myliset.append(None)とは、 mylist[添え字]の添え字が無いという理解であってますでしょうか? であれば、そもそも添え字を書く必要がないですよね。。 間違ったこと言ってますでしょうか。。

関連するQ&A

  • C言語 キーボードで入力された文字列を表示する方法

    はじめまして。 C言語を学習中です。 参考書の例文に、自分なりにコメントを付けて読み進めましたが、どうしても下記のfor文の処理が理解ずに困っております。 for (j = 0;j < i;j++) printf("%d\n",val[j]); なぜval[j](ジェイ)が出てくるのかがわかりません。 val[j](ジェイ)はval[i](アイ)とどのような関連性があるのでしょうか。 また、最後のfor文はどのような処理をしているのでしょうか。 どうか教えていただきたく、お願い致します。 ●例文 次のプログラムは、入力された数値の一覧を表示する例です。 #include <stdio.h> #include <stdlib.h> #include <string.h> void main(void) { int i,j,val[10]; char str[32],*ch; fgets(str,sizeof(str),stdin); /*キーボードで入力された文字列strを読込む*/ ch = strtok(str,",\n");   /* 文字列strの中から単語を取り出して変数chに代入*/ for (i = 0;i < 10;i++) {   /*for文(初期化i=0;条件式i<10;更新i++)*/ if (ch == NULL) {   /*文字列strの中に単語が無ければ*/ break;   /*ループを抜ける*/ } else {   /*文字列strの中に単語があれば*/ val[i] = atoi(ch); /*文字列strの中の最初の単語を数値に変換して配列valの                        i要素に代入する*/ } ch = strtok(NULL,",\n");  /*文字列strの中の次の単語を取り出す*/ } for (j = 0;j < i;j++) printf("%d\n",val[j]); return; } このプログラムの実行結果は次の通りになります。 85,41,26,956,12 入力した文字列 85 41 26 956 12

  • 勉強始めたところです。

    数字と文字を含む文字列Aから数字だけ表示させたいのですが、うまくできず困ってます。(ただし、import reは使用しない。) (1)[0,1,2…,9]のリストを作成 (2)for文で、文字列Aの桁数をループさせる (3)for文内で、文字列Aの各要素がリスト内にあるか確認 (4)(3)で一致しないものは文字と判断する。 (5)for文のループ引数iから、文字列[:i]で表示 と考えているんですが、うまくできません。複雑になって混乱します。 考え方が間違っているのでしょうか。 どのように作成するとうまくいくでしょうか。

  • 入力した数字の分を配列0~3に・・・

    whileで無限ループを作ってscanfで値を入力していくのですが 入力を例えば 0 1 2 2 3(breakする) と入力した場合に その際に a[0] = 1;(0が1個入力されたので1) a[1] = 1; a[2] = 2; 整数で0より小さくて3より大きい場合は無限ループからbreakで脱出するようなプログラムを作りたいと思っているのですが for文でa[i]でやってカウントしていくのかな・・・?とは思っているのですが 中々うまくいきません 関数、ライブラリ等は使いません。 気になってどうしても手をつけてしまうのですが 1日以上悩んでもどうすべきかわかりません

  • Excel UserForm ListBox

    Excel UserForm ListBoxの表示についての質問です Sheets("加工").Range("A44")からRange("G" & LastRow)のセルの値を Form_receipt.ListBox1に表示させたいのですが C~E列は数値なので桁数区切りで表示したくてマクロを作ったのですが A列1列しか表示されないマクロになってしまいました。 どこが悪いのかご教示願えませんか? あわせてC~E列を右揃えでリスト表示する方法も教えてください 失敗作のマクロは以下です Sub Macro48() Form_receipt.ListBox1.Clear Sheets("加工").Select '配列の定義 Dim myRng As Range Dim myList As Variant Dim c As Variant Dim i As Integer Dim j As Integer Dim LastRow As Integer For j = 45 To 94 If Sheets("加工").Range("A" & j).Value = "" Then Exit For End If Next j If Sheets("加工").Range("A47").Value = "" Then LastRow = j - 1 Else LastRow = 46 End If Set myRng = Range("A44", Range("A" & LastRow)) ReDim myList(myRng.Rows.Count - 1, 7) For Each c In myRng myList(i, 0) = c.Offset(, 0).Value myList(i, 1) = c.Offset(, 1).Value myList(i, 2) = Format$(c.Offset(, 2).Value, "@@@,@@@,@@@") myList(i, 3) = Format$(c.Offset(, 3).Value, "@@@,@@@,@@@") myList(i, 4) = Format$(c.Offset(, 4).Value, "@@@,@@@,@@@") myList(i, 5) = c.Offset(, 5).Value myList(i, 6) = c.Offset(, 6).Value myList(i, 7) = c.Offset(, 7).Value i = i + 1 Next c Form_receipt.ListBox1.List() = myList Set myRng = Nothing 'リスト表示幅設定 With Form_receipt.ListBox1 .ColumnWidths = "30,0,60,60,60,150,50" End With Form_receipt.Show End sub

  • 配列の値を集めた1つの文字列として取得するには

    Array ( [0] => a [1] => あ [2] => 123 [3] => 55 ) この配列を "a","あ","123","55" といった1つの文字列として取得したいです。 <?php $list = array("a","あ","123",55); $r = ""; for($i=0; $i<count($list); $i++){ $r .= ',"'.$list[$i].'"'; } $r = substr($r,1); echo $r; ?> このような形でできましたが、もっと良い方法はありますか? そして上の方法で良い場合は、下の1~4のどれが一番適切ですか? [1] for($i=0; $i<count($list); $i++){ $r .= ",\"".$list[$i]."\""; } [2] for($i=0; $i<count($list); $i++){ $r .= ',"'.$list[$i].'"'; } [3] foreach($list as $key => $val){ $r .= ",\"".$val."\""; } [4] foreach($list as $key => $val){ $r .= ',"'.$list[$i].'"'; }

    • 締切済み
    • PHP
  • キーワード検索

    ,で区切られた複数のキーワードがあり、そのキーワードが全て入っている文字列のみを抽出したいと思っています。 キーワードの数は固定ではありません。 ,で区切られたキーワードを分解して配列にし、 絞り込んでいきたいのですが、どうしたらいいのかわかりません。 $keyword = explode("," , $sample); foreach($data as $val){ list($id,$nakami) = explode("," , $val); for($i=0; $i < count($keyword); $i++){ if(ereg($keyword[$i] , $nakami)){ echo "$test"; } } } としても一つのキーワードが入っていれば表示される状態です。

    • ベストアンサー
    • PHP
  • 正規表現preg_matchでincrement?

    foreach($data as $key=>$val) { if(preg_match("/^increment\((\-?\d+)\)$/i",$val,$m)) $q.= "`$key` = `$key` + $m[1], "; ・上記のようなif文があるのですが、どういう意味でしょうか? ・incrementはカウントアップ? ・$valに「-1」…「-9」文字列があれば、$m[1]として利用? ・iがあるので、その際、大小文字の違いを無視?

    • ベストアンサー
    • PHP
  • リストの値を取得したい

    こんにちは。リストの値取得について質問です。 ボタン1を押してファイルを開き、tokenで必要な値だけリストに表示させました。 そしてボタン2を押してリストに表示されている全データをプロンプトに表示させたいのです。 こんな感じで書いてみたんですけど、 if(s.equals("button2")==true){ String val = (String)list.getSelectedValue(); System.out.println(val); } これだと選択された1件しか表示されないんですよね(汗) ためしに if(s.equals("button2")==true){ for(int i=0;i<list.getsize;i++){ String val = (String)list.getSelectedValue(i); System.out.println(val); } } intはダメだとエラーが出ました。 色々調べてみましたがいまいちピンとこないです。 どなたかよろしければ知恵をお貸しください。 よろしくお願いします(^^;)

    • ベストアンサー
    • Java
  • 永久ループ・・・

    どうも、最近C言語の勉強を始めた超初心者です。 int main(void) { int i; for(;;){ printf("桁数を入力してください。:"); scanf("%d",&i); if(i<=12) break; else puts("もう一度入力してください。"); continue; } return(0); } 上のソース、i<=12の条件を満たさなければループを繰り返すというプログラムなんですけど、数値を入力した場合は思った通りに挙動するのですが、文字や文字列を入力すると永久ループになります。scanf関数で返値を受け取って判定するなどいろいろ試したのですが、どうしても永久ループになってしまいます。 どうしてか教えてください。お願いします。

  • C言語のプログラミングについて質問です。

    以下の文を出力して入力:に16進数を入れると10進数に変換した数値の小さい列順に並ぶプログラムを作りたいのですがうまく出来ません。 仕様は以下に記載します。 入力:__、__、__、__、__EnterKeyで結果を表示。 以下のバブルソートの文のどこをいじれば良いでしょうか? 返答宜しくお願いします。 #include <stdio.h> int main (void) { char data[256]; int val[100]; int i = 0; int work; int j; int k; printf("入力 = "); scanf("%s",data); for(i=0;i<100;i++){ val[i] = 0; } k=0; for(i = 0;i<100 ; i++){ if(data[i] == 0x00){ //data[i]がNULLだったら処理を抜ける k++; break; //enterキーでprintf出力 } else if(data[i] == ','){ //カンマだったら /*printf("%d\n",k);*/ k++; } else{ if(data[i] >= 'A' && data[i] <= 'Z'){ //data[i]にAからZが入ったら val[k] = val[k] *16 + data[i] -'A'+10; } else if(data[i] >= '0' && data[i] <= '9'){ //data[i]に0から9が入ったら val[k] = val[k] *16 + data[i] -'0'; } } } /* printf("k=%d\n",k); for(i=0;i<k;i++){ printf("出力 = %d\n",val[i]); } */ //バブルソート//     for(i=0; i<k-1; i++) { if(val[i] < val[i+1]) { } else{ work = val[i]; val[i] = val[i+1]; val[i+1] = work; } } for(i=0;i<k;i++) { printf("出力 = %d\n",val[i]); } }

専門家に質問してみよう