Вы можете обратить проблему:
- распечатать подсписок, если он первый - без новой строки после него
- , если он не первый, вывести новую строку с последующейк следующему подсписку
таким образом, ваша последняя строка не должна \n
в конце:
def matprint(r, c):
data = list(range(1,r*c+1))
l= [data[i*c:i*c+c] for i in range(r)]
formatter = ('{} ' * c).strip() # create the format string once - strip spaces at end
for i,sublist in enumerate(l):
if i: # 0 is False, all others are True
print("")
print( formatter.format( *sublist ), end="" ) # do not print \n at end
matprint(3, 5)
Я также немного оптимизировал код - вы не должныиспользуйте такие вещи, как max,min,list,dict,...
в качестве имен переменных - они скрывают встроенные функции с одинаковыми именами.
Построение вашего списка можно упростить с помощью понимания списка, которое разбивает ваш список чисел - см. Как разбить список на куски одинакового размера? .
Вам не нужно пересчитывать длину вашего подсписка - это c
long.
Вам нужно индекс из enumerate()
, чтобы решить, является ли список«first» - и вам нужно параметр end=""
печати , чтобы избежать автоматической печати новых строк.
Более простую версию без перечисления можно сделать с помощью нарезки списка:
def matprint(r, c):
data = list(range(1,r*c+1))
l= [data[i*c:i*c+c] for i in range(r)]
formatter = ('{} ' * c).strip() # create the format string once - strip spaces at end
print(formatter.format(*l[0]), end="") # print the 1st element w/o newline
for sublist in l[1:]:
# print all others including a \n in front
print( "\n"+formatter.format( *sublist ), end="" ) # do not print \n at end