2017-04-09 8 views
1

試行錯誤を経て解決策を見つけたとき、あなたは今答えを理解できないほどに遭遇しました。リスト入力によるこの入力は何をしますか?

まあ、これはこの作品で私に起こっている:

entr = [list(int(x) for x in input().split()) for i in range(int(input()))] 

入力をコピーすることによって行われ、このブロック全体を貼り付けている:

9 
8327 0 
0070 0 
2681 2 
1767 0 
3976 0 
9214 2 
2271 2 
4633 0 
9500 1 

私のリストの内包が正確に各ステップで何をしていますか?そして、thisを考慮に入れて:forループを使ってどのように書き直すことができますか?これに相当します

答えて

1

実際、あなたのコードはネストされたリストの理解ではありません。単純なリストの理解ではなく、listというconstrutorを使用するためです。 この行は、あなたのコードと同じとして機能:

entr = [[int(x) for x in input().split()] for i in range(int(input()))] 

この行を理解するために、あなたはPythonでリスト内包表記の基本的な構造を覚えておく必要があり、それはを囲む角括弧を持つ2つのコンポーネントobjconditionで構成されてい:

lst = [obj condition] 

それは、このようなループに変換することができます。

lst = [] 
condition: 
    lst.append(obj) 

だから、この質問に戻る。 あなたが今必要とするのは、ネストされたリストの理解をループインループに分割することです。通常は、後の部分の条件である宇宙から宇宙へと始まります。あなたが得た:

entr = [] 
for i in range(int(input())): 
    entr.append([int(x) for x in input().split()])) # the obj is a list in this case. 

そして今、あなたが行にリスト-理解を破ることができる3.

entr = [] 
for i in range(int(input())): 
    entry = [] 
    for x in input().split(): 
     entry.append(int(x)) 
    entr.append(entry) 

をだから、今のものは、元の行を簡単に理解することができます。

  1. このプログラムは、entrというエントリリストを作成します。
  2. プログラムはユーザー入力を求めて、stringintに変換します。これは入力したい項目の番号です(numと仮定します)。
  3. プログラムはnum回のユーザー入力を要求しますが、スペースを使って別のものを入力する必要があります。
  4. プログラムは、str.split()メソッド(パラメータsepのデフォルトはスペース)で入力したリスト(上記コードではentryという名前のリスト)に分割します。 appendentryはすべてのループにリストされています。
  5. entryリストのすべての要素に対して、intに変換されました。

私の英語は私の答えを改善すること自由に感じ、貧しいかもしれ:)

+0

あなたの助けのためにどうもありがとうございます。私は今それがかなり明確になっている – MPadilla

+0

あなたがそれを得てうれしい。 – Feishi

1

は:

entr = [] 
for i in range(int(input())): 
    row = [] 
    for x in input().split(): 
     row.append(int(x)) 
    entr.append(row) 

あなたはカップルのステップでリストの内包にそれをコピー&ペーストすることができます。まず、内部ループ/リスト:あなたが持っている

entr = [ 
    [int(x) for x in input().split()] 
    for i in range(int(input())) 
] 

:(わかりやすくするために複数の行の上にコピーされた)

entr = [] 
for i in range(int(input())): 
    entr.append([int(x) for x in input().split()]) 

が続いて外側のループ/リスト:row変数なし

entr = [] 
for i in range(int(input())): 
    row = [int(x) for x in input().split()] 
    entr.append(row) 

内部のものがlistコンストラクタに渡されたジェネレータとして書かれているので、同じネストされた理解はの代わりにlist(int(x) for x in input().split())のように見える。それはリストの理解を使用するよりも少し混乱します。

説明が役立ちますように願っています!

関連する問題