0

データベース内のデータを表示するために、MySQL と Python のサーバー ページを使用しています。データベースで、このデータを選択しました:リストx =[1, 61, 121, 181, 241, 301]とリストのリストでz = (['a','b'],['c','d'],['e','f'],['g','h'],['i','j'],['k','l'])、これらを次のようにテーブルに入れたいと思います:

001   a b
061   c d
121   e f
181   g h
241   i j
301   k l

これを行うには、2 つの「for ループ」を使用する必要があると考えるのは正しいですか? これが私が使用しているものです:

rows = cur.fetchall()
z=[]
for row in rows:
    z.append(dict[row[1]]) 
x=[]
for i in range(1, len(rows),60):
    x.append(i)
for i in range(0,len(z), 60):
    req.write("<tr><td>%s</td><td>%s</td></tr>" %(str(x[i:i+60]), str(z[i:i+60])))

そして、これは私が出力しているものです:

[1, 61, 121, 181, 241, 301]      a b
                                 c d
                                 e f
                                 g h
                                 i j
                                 k l

どんな助けでも大歓迎です!

4

4 に答える 4

1
for index, (a, b) in zip(x, z):
    print(index, a, b)         # format as appropriate

また、zリストの作成が改善される可能性があります。

z = [dic[row[1]] for row in rows]         # calling variable dict shadows built-in

x次のように作成できますrange(1, len(rows), 60)

于 2010-03-11T15:55:16.173 に答える
1

「60 ずつステップ」を 2 回実行しています。表示されるリストとまったく同じようにxビルドxし、一度に 60 ずつステップしてから、最初の 60 項目を取得します (それほど多くはありませんが、したがって、実際にはすべてのアイテムを取得しています) str(x[i:i+60])2 番目のループで を使用します。

2 番目のループを次のように変更します。

for i in range(0,len(z), 60):
    req.write("<tr><td>%s</td><td>%s</td></tr>" %(x[i//60], z[i:i+60]))

フォーマッティングはすでに内部的にそれを行っstrているので、冗長な呼び出しも排除しました。%s

于 2010-03-11T15:56:21.943 に答える
0
  1. 配列 + インデックスの代わりに反復子を使用してみてください。xrangeなどの代わりに例を使用rangeします。テーブル内のすべてをキャッシュする代わりに、2 つのカーソルを使用する方が有益な場合があります (MySQL の機能はわかりません)。

  2. zip2つの配列のように、2つのイテラブルを取る関数があります。

コード例:

for (xe, ze) in zip (x, z):
    req.write("<tr><td>%s</td><td>%s</td></tr>" % (xe, ' '.join(ze))
于 2010-03-11T16:04:52.690 に答える
0
#Following code will work in Python 3.x

x =[1, 61, 121, 181, 241, 301]
z = (['a','b'],['c','d'],['e','f'],['g','h'],['i','j'],['k','l'])

for i in zip(x, z):
    print("{0:03} {1} {2}".format(i[0], i[1][0], i[1][1]))
于 2010-03-11T16:04:22.073 に答える