kiri___
@kiri___

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

与えられたデータをa[i][j]のように多重ループで示したい

解決したいこと

ここに解決したい内容を記載してください。

n行k列のデータが用意されているので、数字以下の部分を二重ループを用いて、(a[i][j]などインデックス付きの形でそれぞれ示したい。

入力例
5 8
.#.#....
........
........
........
.....#..

IndexError: list index out of range

該当するソースコード

w, h = map(int,input().split())
li = []
for i in range(h):
    li.append(input().split())
    for j in range(w):
        print(li[i][j])

自分で試したこと

wとhの場所を入れ替えたり、友達に相談したりしました。過去の自分で書いたソースコードを見直しました。

0

3Answer

まず、入力の最初の5 8は続く入力の高さが5で幅が8であることを表しているようですね。

w, h = map(int,input().split())
print(w) # 5
print(h) # 8

記載のコードで出力して確認すると、逆になっているようですからこれを修正しょう。

- w, h = map(int,input().split())
+ h, w = map(int,input().split())
print(w) # 8
print(h) # 5

さて、その次の行を取得してみましょう。

h, w = map(int,input().split())
+ line = input()
+ print(line) # .#.#....

a[i][j]のようにアクセスしたい」ということですので配列に入れてみましょう。

h, w = map(int,input().split())
- line = input()
- print(line) # .#.#....
+ data = []
+ data.append(input())
+ print(data[0])

残りのデータも読み込んでみましょう。

h, w = map(int,input().split())
data = []
data.append(input())
+ data.append(input())
+ data.append(input())
+ data.append(input())
+ data.append(input())
print(data[0]) # .#.#....
+ print(data[1]) # ........ 
+ print(data[2]) # ........
+ print(data[3]) # ........
+ print(data[4]) # .....#..

さて、文字列に対してa[i][j]のようにアクセスするにはどうすれば良いでしょうか。

string = "abcde"

pythonでは文字列の文字にアクセスできます。

string = "abcde"
print(string[2]) # c

配列にしたほうが良ければ、例えばlist関数を使ってみます。

string = "abcde"
chars = list(string)
print(chars) # ['a', 'b', 'c', 'd', 'e']

先程の入力の1行を配列にしてみましょう。

h, w = map(int,input().split())
data = []
data.append(list(input()))
print(data[0]) # ['.', '#', '.', '#', '.', '.', '.', '.']

ここまででゴールに必要な要素が揃ってきたと思いますが、いかがでしょうか?

1Like

Comments

  1. @kiri___

    Questioner

    ありがとうございます!

↓こうでしょうか?

diff
- w, h = map(int,input().split())
+ h, w = map(int,input().split())
  li = []
  for i in range(h):
-    li.append(input().split())
+    li.append(input())
+ for i in range(h):
       for j in range(w):
-         print(li[i][j])
+         print(li[i][j], end='')
+     print()
  h, w = map(int,input().split())
  li = []
  for i in range(h):
      li.append(input())
  for i in range(h):
      for j in range(w):
          print(li[i][j], end='')
      print()
0Like

Your answer might help someone💌