Страницы, таблицы и списки Python-сервера - PullRequest
0 голосов
/ 11 марта 2010

Я использую страницы 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

Правильно ли я думаю, что мне придется использовать два «для цикла», чтобы сделать это? Вот что я использую:

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 ]

1 голос
/ 11 марта 2010

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

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

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

1 голос
/ 11 марта 2010
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)

0 голосов
/ 11 марта 2010
  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))
0 голосов
/ 11 марта 2010
#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]))
...