Как преобразовать список списков в строку с новой строкой

У меня есть этот код:

def table(h, w):
    table = [['.' for i in range(w)] for j in range(h)]
    return table

который возвращает это

[
['.', '.', '.', '.'], ['.', '.', '.', '.'], ['.', '.', '.', '.'], ['.', '.', '.', '.']
]

Как заставить вернуть это?

....
....
....
....

person Nim Pr    schedule 20.10.2019    source источник
comment
Попробуйте использовать присоединение к списку   -  person Sushant    schedule 20.10.2019
comment
Что будет это? Строка? Печатать на экране?   -  person Dani Mesejo    schedule 20.10.2019
comment
Вы печатаете представление таблицы. Если вам нужен собственный формат, напишите код (вам понадобится for циклов). Однострочник может выглядеть так: print('\n'.join(''.join(row) for row in table))   -  person Matthias    schedule 20.10.2019


Ответы (3)


Вы не можете напрямую возвращать что-то подобное. Это не связано ни с каким типом данных. Тем не менее, вы можете создать функцию, которая форматирует выходные данные таким же образом, как и ваше текущее представление таблицы:

def print_table(table):
    for row in table:
        print(''.join(row))

Что дает вам желаемый результат:

....
....
....
....

РЕДАКТИРОВАТЬ: Теперь, когда я думаю об этом, это возможно. Но вы будете возвращать только строковое представление вашей таблицы, а не ее структуру (что, как я предполагал, вам нужно):

def table(h, w):
    table = ''
    for row in range(h):
        table += '.' * w + '\n'
    return table
person adrianp    schedule 20.10.2019

Вопрос уже задан >Как я могу добавить \n в конец списка в компоновке списка

Ответ :

(Единственный) способ сделать это - отформатировать результат (тип списка) в строку:

def table(h, w):
    table = [['.' for i in range(w)] for j in range(h)]
    return table
def format_table(table_):
  return "[\n" + ''.join(["\t" + str(line) + ",\n" for line in table_]) + "]"
print(format_table(table(3,3)))

Выход :

[
  ['.', '.', '.'],
  ['.', '.', '.'],
  ['.', '.', '.'],
]

Для этого:

def format_table(table_):
    return ''.join([''.join([e for e in line]) + ",\n" for line in table_])
person pymym213    schedule 20.10.2019

Вы можете попробовать это

def table(h, w):
    table = '\n'.join(['.'*w]) for j in range(h)])
    return table
person sahasrara62    schedule 20.10.2019
comment
''.join(['.' for i in range(w)]) может быть просто '.' * w - person iz_; 20.10.2019
comment
''.join(['.' for i in range(w)]) - эта часть слишком сложна и может быть даже неправильной. Вы выведете ., даже если позже в списке может быть другой контент. - person Matthias; 20.10.2019