Как использовать » n» для изменения строки, но при этом печатать остальные элементы в одной строке

#python

#python

Вопрос:

Используя приведенный ниже код —

 x = ['a', 'b', 'c', 'n', 'a1', 'b1', 'c1']
for i in x :
    print(i , end = " ")
  

Я хочу получить результат —

 a b c
a1 b1 c1
  

В настоящее время он сдвигает a1 на один пробел —

 a b c
 a1 b1 c1
  

Если я не использую end =" " , все элементы печатаются в их собственной строке.

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

1. Проверьте, есть ли i n перед печатью, и используйте end = "" , если да.

Ответ №1:

 x = ['a', 'b', 'c', 'n', 'a1', 'b1', 'c1']
for i in x :
    print(i , end = " " if i != 'n' else '')
  

Ответ №2:

Как правило, я бы хотел использовать str.join() вместо перебора отдельных элементов, например:

 for i in x:
    print(i, end=' ')
  

Почти эквивалентно (игнорируя ложный пробел в конце для приведенного выше):

 print(' '.join(x))
  

Но у вас есть небольшая проблема в том, что она также окружает 'n' пробелами, поэтому вы хотите заменить ' n ' на 'n' , так что:

 In []:
print(' '.join(x).replace(' n ', 'n'))

Out[]:
a b c
a1 b1 c1
  

Или вы можете немного перестроиться и рассмотреть эту проблему как проблему разделения списка по значению (в данном случае 'n' ), а затем распечатать группы:

 In []:
import itertools as it
print('n'.join(' '.join(g) for k, g in it.groupby(x, lambda a: a == 'n') if !k))

Out[]:
a b c
a1 b1 c1
  

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

1. Первое решение для объединения / замены работает просто отлично… Не могли бы вы взглянуть на решение, которое я нашел самостоятельно?

2. Если ваше решение работает для вас, используйте его. Это не совсем дает тот же результат, что и при устранении пробела между элементами во второй строке. Я бы, вероятно, объединил a join с format , если вы ищете более табличный вывод, на SO есть много примеров, показывающих, как это сделать.

Ответ №3:

Я вроде как сам нашел другое решение … так что это тоже работает … вроде как — можете ли вы, ребята, предложить это.

 x = ['a', 'b', 'c', 'n', 'a1', 'b1', 'c1']

y = ""
for i in x:
    y = y   i.rjust(2,)
    
print(y)
  

вывод —

  a b c 
a1b1c1
  

Ответ №4:

Создано также следующее необычное решение просто для удовольствия:

 x = ['a', 'b', 'c', 'n', 'a1', 'b1', 'c1']
print(*map(lambda s: s   (' ', '')[s.endswith('n')], x), sep = '')
  

Он учитывает тот факт, что для печати списка строк x вам просто нужно сделать:

 print(*x)
  

это то же самое и самый короткий способ сделать то, что было сделано в следующем коде первоначального участника:

 for i in x :
    print(i , end = " ")
  

Эта * операция называется распаковкой.