Как добавить новые строки между подсписками?

#python #formatting

#python #форматирование

Вопрос:

У меня есть функция, которая в настоящее время возвращает это:

[['o', 'o', 'o', 'o', 'o'], ['o', 'o', 'X', 'o', 'o'], ['o', 'o', 'o', 'o', 'o'], ['o', '_', 'o', 'o', 'o'], ['o', 'o', '_', 'o', 'o']]

когда я бы вместо этого хотел, чтобы он возвращался:

 [['o', 'o', 'o', 'o', 'o'], 
 ['o', 'o', 'X', 'o', 'o'], 
 ['o', 'o', 'o', 'o', 'o'], 
 ['o', '_', 'o', 'o', 'o'], 
 ['o', 'o', '_', 'o', 'o']]
  

Вот код, который у меня есть до сих пор:

 def create_box(box):
    for i in box:
       line = []
        for j in box:
            letters = []
            for k in j:
                if k != " ":
                    letters.append(k)
            line.append(letters)
            output = "n".join(str(line))

    return line
  

Входное значение взято из текстового файла. Это:

 o o o o o
o o X o o
o o o o o
o _ o o o
o o _ o o
  

Как бы мне добавить новую строку между подсписками?

Комментарии:

1. Внутри вашей функции вы выполняете кучу работы по созданию строки с именем output , в которой есть несколько новых строк, но затем вы return battleship_line , которая, по-видимому, является глобальной переменной (поскольку в функции нет другого кода, который с ней работает). Это то, что вы хотели, чтобы произошло?

2. Почему вы повторяете box дважды?

3. Значит, вы только не хотите печатать этот список по-другому?

4. Да, я хочу распечатать список списков из входного значения. С новыми строками между каждым вложенным списком.

5. Это странное использование line переменной… Для каждого элемента box вы восстанавливаете список… Вы могли бы выполнить 1 цикл при объявлении line вне цикла и удалить двойной цикл… Кроме того, соединение не является списком, во время вызова output = "n".join(str(line)) вы создаете строковую переменную, отчасти поэтому она печатается таким образом

Ответ №1:

В Python есть встроенный модуль с именем pprint (для pretty-print), который делает подобные вещи «из коробки»:

 import pprint

s = [['o', 'o', 'o', 'o', 'o'], ['o', 'o', 'X', 'o', 'o'], ['o', 'o', 'o', 'o', 'o'], ['o', '_', 'o', 'o', 'o'], ['o', 'o', '_', 'o', 'o']]

pp = pprint.PrettyPrinter()
pp.pprint(s)
  

Результат:

 [['o', 'o', 'o', 'o', 'o'],
 ['o', 'o', 'X', 'o', 'o'],
 ['o', 'o', 'o', 'o', 'o'],
 ['o', '_', 'o', 'o', 'o'],
 ['o', 'o', '_', 'o', 'o']]
  

Редактировать на основе требований

Чтобы сделать что-то подобное вручную, вы можете join использовать строковые представления списков с запятой и новой строкой (и пробелом, чтобы выровнять их). Вам нужно будет добавить внешние скобки вручную. Важной частью является вызов str() каждого подсписка для получения строки из списка:

 s = [['o', 'o', 'o', 'o', 'o'], ['o', 'o', 'X', 'o', 'o'], ['o', 'o', 'o', 'o', 'o'], ['o', '_', 'o', 'o', 'o'], ['o', 'o', '_', 'o', 'o']]

print('['  ',n '.join(str(sub) for sub in s)   ']')
  

В результате:

 [['o', 'o', 'o', 'o', 'o'],
 ['o', 'o', 'X', 'o', 'o'],
 ['o', 'o', 'o', 'o', 'o'],
 ['o', '_', 'o', 'o', 'o'],
 ['o', 'o', '_', 'o', 'o']]
  

Комментарии:

1. Это очень полезно. Можно ли было бы реализовать это вручную? Я пытаюсь избежать импорта чего-либо.

2. @AnthonyPetruzzio с уважением, избегать импорта вещей, которые являются частью стандартной библиотеки, — не лучшее использование python. То, что он импортирован, не означает, что это не Python. В библиотеку вложено множество полезных инструментов, и нет смысла изобретать их заново. Такие вещи, как itertools и collections и, в значительной степени являются частью базового python, но вам нужно импортировать их, чтобы использовать их.

3. Я понимаю, и я согласен. Я бы использовал импорт, но это для назначения, и нам дали инструкции сделать это вручную. Спасибо за вашу помощь, хотя я ценю это!

4. @AnthonyPetruzzio понял. Возможно, редактирование укажет вам полезное направление.

Ответ №2:

Вот еще один способ сделать это:

 output = "["
for sublist in list:
    output  = str(sublist)   ',n '
print(output[:-3]   ']')
  

сначала соберите все подсписки output и ,n соедините их, а затем распечатайте, удалив из него последние 3 символа ( ',' , 'n' , ' ' ) и добавив ]