как не печатать перевод строки в конце оператора в цикле - PullRequest
0 голосов
/ 06 сентября 2018
r, c = input().split()
r=int(r)
c=int(c)
list1=[]
v=1
for i in range(r):
    list2=[]
    for j in range(c):
        list2.append(v)
        v=v+1
    list1.append(list2)


for i in range(r):
    for j in range(c):
        print(list1[i][j],end=" ")
    print()        

Вот изображение, показывающее фактический вывод и вывод I получаю:

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

Вы можете создать подсписок, который разделит данные, которые вам нужно распечатать. Перед печатью каждой части проверьте, нужно ли печатать '\n' для предыдущей строки и печатать разделы без '\n':

r, c = map(int, input().split())

# create the parts that go into each line as sublist inside partitioned
partitioned = [ list(range(i+1,i+c+1)) for i in range(0,r*c,c)]
#                       ^^^^ 1 ^^^^              ^^^^ 2 ^^^^

for i,data in enumerate(partitioned):
    if i>0: # we need to print a newline after what we printed last
        print("")

    print(*data, sep = " ", end = "") # print sublist with spaces between numbers and no \n
  • ^^^^ 1 ^^^^ создает диапазон всех чисел, которые необходимо распечатать для каждого раздела
  • ^^^^ 2 ^^^^ создает начальные номера каждой "строки", используемой в ^^^^ 1 ^^^^ (уменьшается на 1, но фиксируется в диапазоне 1)
  • enumerate(partitioned) возвращает позицию внутри последовательности и данные в этой позиции - вы хотите печатать '\n' только после первого вывода.

После последнего partitioned - вывода выход for ... завершен и больше не будет вводиться - следовательно, после него нет \ n.


Вывод для '6 3' (\ n добавлено для ясности):

1 2 3\n
4 5 6\n
7 8 9\n
10 11 12\n
13 14 15\n
16 17 18

с partitioned:

[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15], [16, 17, 18]]
0 голосов
/ 06 сентября 2018

Проблема в том, что вам нужно пропустить новую строку в конце самого внешнего цикла и пробелы в конце каждой строки. Для обычного итератора это требует немного дополнительной работы, но для простого случая достаточно просто проверить i и j:

for i in range(r):
    for j in range(c):
        print(list1[i][j], end=" " if j < c - 1 else "")
    if i < r - 1:
        print()
...