2015-09-04 5 views
0

У меня есть этот код:Полиграфические пункты списка произвольного размера

def draw_grid(grid_ref): 
    for i in grid_ref: 
     print i[0], i[1], i[2], i[3], i[4], i[5] 

y0 = ['-','-','-','-','-','-'] 
y1 = ['-','-','-','-','-','-'] 
y2 = ['-','-','-','-','-','-'] 
y3 = ['-','-','-','-','-','-'] 
y4 = ['-','-','-','-','-','-'] 
y5 = ['-','-','-','-','-','-'] 
grid = [y0,y1,y2,y3,y4,y5] 
draw_grid(grid) 

Какой выход есть:

- - - - - - 
- - - - - - 
- - - - - - 
- - - - - - 
- - - - - - 
- - - - - - 

Это то, что я хочу, но есть некоторые вещи неправильно. И главная проблема заключается в том, что я не могу использовать функцию draw_grid с большими или меньшими сетками. Поэтому у меня есть:

def grid_gen(x,y): #Generates a grid of y lists with x items in every list 
    row = [] 
    grid = [] 
    for i in range(x): 
     row.append('-') 
    for i in range(y): 
     grid.append(row) 
    return grid 

, и я не могу использовать draw_grid на нем.

Мой вопрос: как я могу улучшить работу draw_grid, чтобы нормально работать с любой сеткой и получить тот же результат?

+0

Может быть, попробуйте использовать оператор звезды? 'Печать (* сетка)'? – cyphar

+0

@cyphar OP, похоже, использует Python 2.x –

+0

Функция 'grid_gen' добавляет всегда одну и ту же строку в вашу сетку. – Matthias

ответ

3

Вы можете использовать ' '.join, чтобы присоединиться ко всей линии от сетки с пробелами и распечатать ее, независимо от количества ее ячеек.

def draw_grid(grid_ref): 
    for i in grid_ref: 
     print(' '.join(i)) 

Кроме того, как отмечено в комментариях, ваша grid_gen функция создает список список, который содержит несколько ссылок на один и тот же список, то есть, если вы измените один из них, вы изменяете все из них. Вы можете использовать [:], чтобы создать копию списка row, прежде чем вставлять его в список списков grid.

def grid_gen(x,y): 
    row = [] 
    grid = [] 
    for i in range(x): 
     row.append('-') 
    for i in range(y): 
     grid.append(row[:]) 
    return grid 

Или намного короче, используя вложенный список понимание:

def grid_gen(x,y): 
    return [['-' for i in range(x)] for k in range(y)] 
+0

Я считаю, что это вредно для языка, когда люди все еще предлагают код, полезный только для python 2.x. По крайней мере, поставьте скобки вокруг 'print' или используйте' print_function', которые приносят много улучшений ... – JBernardo

+0

Я буду использовать (и принять) это, потому что ближе к моему знанию питона. Я не знаю много о __future__ или print(), но, очевидно, мне нужно их исследовать. Большое спасибо!! :) –

+1

Вы также можете сделать '['-'] * x' вместо' ['-' для i в диапазоне (x)] ';) – swenzel

3

Вы можете также использовать функцию print():

from __future__ import print_function # Python 2.x 

def draw_grid(grid_ref): 
    for i in grid_ref: 
     print(*i) 

разделитель по умолчанию является ' '.

0

Try строка умножения:

>>> n = 5 
>>> for x in range(n): 
...  print ('- '*n).strip() 
... 
- - - - - 
- - - - - 
- - - - - 
- - - - - 
- - - - - 
>>> n =2 
>>> for x in range(n): 
...  print ('- '*n).strip() 
... 
- - 
- - 
>>> 
Смежные вопросы