Страницы, таблицы и списки 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]))
Попробуйте использовать итераторы вместо массивов + индексов. Враг пример использования
xrange
вместоrange
и т. д. Может быть полезно (я не знаю возможностей MySQL) использовать 2 курсора вместо кэширования всего в таблице.Есть
zip
функция, которая принимает два итерируемых - как два массива.
Пример кода:
for (xe, ze) in zip (x, z):
req.write("<tr><td>%s</td><td>%s</td></tr>" % (xe, ' '.join(ze))