1

forループ内でリストのリストを作成するにはどうすればよいですか?

これが私が今コーディングしたものです:

    a = 0
    xy=[[[],[]],[[],[]],[[],[]],[[],[]],[[],[]],[[],[]],[[],[]],[[],[]],[[],[]],[[],[]],[[],[]],[[],[]]]
    for liness in range(len(NNCatelogue)):
        a=0
        for iii in range(len(NNCatelogue[liness])):

            while a < len(catid):

                if catid[a]==NNCatelogue[liness][iii]:

                    xyiii = (catid[a], a)
                    xy.append(xyiii)   
                a += 1

得られる出力は、予想どおり、ペアの長いリストです。次のようになります。

     [...,('C-18-1262', 30908),
     ('C-18-1264', 30910),
     ('C-18-1265', 30911),
     ('C-18-1267', 30913),
     ('C-18-1250', 30896),
     ('C-18-1254', 30900),...]

ただし、このペアのリストをペアのリストのリストに変えたいと思います。1268 回の反復があり、各リストの長さは 12 にする必要があります (したがって、それぞれに 12 の要素を持つ 1268 個のリスト)。ループ中にこれにアプローチする方法についてのアイデアはありますか?

4

3 に答える 3

4

このようなもの、おそらく。多くの不要なインデックス作成を節約するために、リストを直接反復処理していることに注意してください。

xy = []
for line in NNCatelogue:
    l = []
    for c in line:
        for a, ca in enumerate(catid):
            if ca == c:
                l.append((ca, a))
    xy.append(l)

カテゴリ インデックスを検索するためだけに内部ループを使用している場合は、内部ループを回避するために辞書を追加すると便利です。

于 2012-10-10T15:48:47.393 に答える
1

すぐに使えるフレンドリーな提案がいくつかあります。

  1. まず第一に、最初の a=0 は冗長です。最初の for ループ内で a=0 を使用して、同じことを 2 回実行します。

  2. 第二に、なぜ xy のリスト要素の巨大なフレームワークを一番上で宣言しているのですか? 必要なものはいつでも append() できます。

  3. 最後に、while ループは単純な for ループです。

    for n in range(len(catid)):
    
于 2012-10-10T15:49:49.013 に答える
0

次のようにリスト展開を使用して、リストのリストを作成できます。

list_of_lists = [[j for j in range(0, 3)] for _ in range(0, 3)]

3x3 リストを出力するもの:

[ [0, 1, 2], 
  [0, 1, 2], 
  [0, 1, 2]
]
于 2014-05-15T02:11:40.167 に答える