Страницы, таблицы и списки Python-сервера

Я использую страницы MySQL и Python Server для отображения данных в базе данных. В БД я выбрал эти данные: список 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

Правильно ли я считаю, что для этого мне нужно использовать два цикла 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 ответа

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)

Вы делаете "шаг на 60" дважды x - ты строишь x иметь точно тот список, который вы видите, уже шагнув по 60 за раз, а затем получить свои первые 60 предметов (у него не так много, так что вы получаете все предметы по сути) с str(x[i:i+60]) во втором цикле.

Измените второй цикл, например:

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 форматирование уже делает это внутренне.

#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]))
  1. Попробуйте использовать итераторы вместо массивов + индексов. Враг пример использования xrange вместо range и т. д. Может быть полезно (я не знаю возможностей MySQL) использовать 2 курсора вместо кэширования всего в таблице.

  2. Есть zip функция, которая принимает два итерируемых - как два массива.

Пример кода:

for (xe, ze) in zip (x, z):
    req.write("<tr><td>%s</td><td>%s</td></tr>" % (xe, ' '.join(ze))
Другие вопросы по тегам