Chamelion
@Chamelion (リオン カメ)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

もっと分かりやすくまとめたいです

解決したいこと

京都大学のpythonプログラミング演習で下の条件を満たすように出力出来たんですが、もっと読みやすくまとめたいので改善できる箇所があったら教えてほしいです。

 条件
● 1 行には,1つの東西の通り上の交差点名を出力する。
● 同じ東西の通り上の交差点名の間には「, 」(半角のカンマとスペース)を挿入する。ただし、行末にカンマがあってはいけない。
具体的には以下のような出力になります.
三条河原町, 三条烏丸, 三条堀川
四条河原町, 四条烏丸, 四条堀川
五条河原町, 五条烏丸, 五条堀川

該当するソースコード

tozai = ["三条","四条", "五条"]
nanboku = ["堀川", "烏丸", "河原町"]
cross_table = []
for i in range(len(tozai)):
    street = []
    for j in range(len(nanboku)):
        cross = tozai[i]+nanboku[j]
        street.append(cross)
    cross_table.append(street)
for k in range(len(cross_table)):
    if k < len(cross_table)-1:
         cross = cross_table[k]
    else:
       cross = cross_table[k]
    print(*cross, sep=", ")
0

3Answer

for k in range(len(cross_table)):
    if k < len(cross_table)-1:
         cross = cross_table[k]
    else:
       cross = cross_table[k]

このあたりとかまとめられそうな気がします。

0Like

Comments

  1. @Chamelion

    Questioner

    どのようにまとめたらいいと思いますか?
  2. 1. Pythonに限らずですが、`if ... A else B`でAとBの処理が同じならそもそもは場合分けはいらないはずです。
    2. ほかのfor文にも言えますが、配列に対してインデックスが不要であれば`for i in range(len(array)):`でなく`for item in array`で十分だと思います。
  3. @Chamelion

    Questioner

    ありがとうございます
    アドバイス通りに書き直したらすごいコンパクトになってすごく読みやすくなりました。
tozai = ["三条","四条", "五条"]
nanboku = ["堀川", "烏丸", "河原町"]
for i in tozai:
    street = []
    for j in nanboku:
        street.append(i+j)
    print(*street, sep=", ")

こういうことですか?

0Like

内包表記やジェネレータ式を使っていいなら・・・

tozai = ["三条","四条", "五条"]
nanboku = ["堀川", "烏丸", "河原町"]
for t in tozai:
    print(', '.join(t + n for n in nanboku))

さらに1行にまとめてみたり・・・

tozai = ["三条","四条", "五条"]
nanboku = ["堀川", "烏丸", "河原町"]
print(*[', '.join(t + n for n in nanboku) for t in tozai], sep='\n')
0Like

Your answer might help someone💌