Печать 5 элементов в строке по отдельным строкам для списка?

У меня есть список неизвестного количества элементов, скажем 26. скажем,

list=['a','b','c','d','e','f','g','h',
'i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']

Как напечатать так:

abcde

fghij

klmno

pqrst

uvwxy

z

? Большое спасибо. Попытка:

    start = 0
    for item in list:
        if start < 5:
            thefile.write("%s" % item)
            start = start + 5
        else:
            thefile.write("%s" % item)
            start = 0

Ответ 1

Ему нужно вызвать функции for-loop и join, которые могут его решить.

l=['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']

for i in range(len(l)/5+1):
    print "".join(l[i*5:(i+1)*5]) + "\n"

Демо:

abcde

fghij

klmno

pqrst

uvwxy

z

Ответ 2

Вы можете сделать это по понятию списка: "\n".join(["".join(lst[i:i+5]) for i in xrange(0,len(lst),5)]) xrange(start, end, interval) здесь даст список целых чисел, которые равномерно распределены на расстоянии 5, то мы перечислим данный список в маленькие куски, каждая из которых имеет длину 5, используя сортировку списка.

Затем метод .join() делает то, что предлагает название, он объединяет элементы списка, помещая данный символ и возвращает строку.

lst = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']

print "\n".join(["".join(lst[i:i+5]) for i in xrange(0,len(lst),5)])

>>> abcde
    fghij
    klmno
    pqrst
    uvwxy
    z

Ответ 3

for i, a in enumerate(A):
    print a, 
    if i % 5 == 4: 
        print "\n"

Другой альтернативой, запятая после печати означает, что символ новой строки отсутствует

Ответ 4

Здесь много ответов, рассказывающих вам, как это сделать, но никто не объясняет, как это понять. Трюк, который мне нравится использовать для вычисления цикла, заключается в том, чтобы написать первые несколько итераций вручную, а затем искать шаблон. Кроме того, сначала игнорируйте краевые случаи. Здесь очевидный краевой случай: что, если размер списка не кратен 5? Не беспокойтесь об этом! Я попытаюсь избежать использования каких-либо причудливых языковых функций, которые облегчили бы нам в этом ответе, и вместо этого сделают все вручную, трудным путем. Таким образом, мы можем сосредоточиться на базовой идее, а не на интересных функциях Python. (У Python много интересных функций. Я честно не уверен, могу ли я сопротивляться им, но я попробую.) Я буду использовать инструкции печати вместо thefile.write, потому что мне кажется, что это легче читать. Вы даже можете использовать операторы печати для записи в файлы: print >> thefile, l[0], и не нужно для всех этих строк %s:) Здесь версия 0:

print l[0], l[1], l[2], l[3], l[4]
print l[5], l[6], l[7], l[8], l[9]

Этот цикл достаточно прост, что, возможно, достаточно двух итераций, но иногда вам может понадобиться больше. Здесь версия 1 (обратите внимание, что мы все еще предполагаем, что размер списка кратен 5):

idx=0
while idx < len(l):
  print l[idx], l[idx+1], l[idx+2], l[idx+3], l[idx+4]
  a += 5

Наконец, мы готовы позаботиться о том, что большинство номеров не кратно 5. Приведенный выше код будет в основном аварийным в этом случае. Попробуем исправить это, не задумываясь слишком сильно. Есть несколько способов сделать это; это та, с которой я столкнулся; вам рекомендуется попытаться придумать свои собственные, прежде чем заглянуть в то, что я сделал. (Или после просмотра, если вы предпочитаете.) Версия 2:

idx=0
while idx < len(l):
  print l[index],
  if idx+1 < len(l): print l[idx+1],
  if idx+2 < len(l): print l[idx+2],
  if idx+3 < len(l): print l[idx+3],
  if idx+4 < len(l): print l[idx+4]
  idx += 5

Наконец-то у нас есть код, который делает то, что мы хотим, но это не очень. Это так повторяемо, что я прибегал к копированию/вставке, чтобы написать его, и это тоже не очень симметрично. Но мы знаем, что делать с повторяющимся кодом: используйте цикл! Версия 3:

idx=0
while idx < len(l):
  b = 0
  while b < 5:
    if idx+b < len(l): print l[idx+b],
    b += 1
  print
  idx += 5

Он больше не повторяется, но он не стал короче. Это может быть хорошее время, чтобы посмотреть на наш код и посмотреть, отражает ли оно лучшее решение, или просто отражает путь, который мы взяли, чтобы добраться сюда. Может быть, есть более простой способ. Действительно, почему мы обрабатываем вещи в блоках по пять? Как насчет того, чтобы мы шли по одному, но особенно каждый пятый предмет. Пусть начнется. Версия 4:

idx=0
while idx < len(l):
  print l[idx],
  if idx % 5 == 4: print
  idx += 1

Теперь это намного красивее! На этом этапе мы много работали и вознаграждали себя, глядя на то, что классные функции Python должны сделать этот код еще приятнее. И мы находим, что ответ dabhand - это почти то, что у нас есть, за исключением того, что он использует enumerate, поэтому Python выполняет работу по отслеживанию того, на каком количестве мы находимся. Это только спасает нас двумя строками, но с такой короткой петлей, она почти сокращает наш счетчик строк наполовину:) Версия 5:

for idx, item in enumerate(l):
  print item,
  if idx % 5 == 4: print

И это моя окончательная версия. Многие люди предлагают использовать join. Это хорошая идея для этой проблемы, и вы можете ее использовать. Беда в том, что это не помогло бы, если бы у вас была другая проблема. Подход DIY работает даже тогда, когда у Python нет предварительно приготовленного решения:)

Ответ 5

Это будет работать:

n = m = 0
while m < len(l):
    m = m+5
    print("".join(l[n:m]))
    n = m

Но я считаю, что существует более питонический способ выполнить задачу.

Ответ 6

Вы можете сделать что-то более легкое, как показано ниже, разбить список на суб-список, также это кажется более Pythonic. Затем распечатайте его, как захотите. Также не используйте список как ключевое слово (не рекомендуется)

sub_list1=[list1[x:x+5] for x in xrange(0, len(list1), 5)]
for each in sub_list1:
    print( ''.join(each))

Ответ 7

start = 0
for item in list:
    if start < 4:
        thefile.write("%s" % item)
        start = start + 1
    else:                             #once the program wrote 4 items, write the 5th item and two linebreaks
        thefile.write("%s\n\n" % item)
        start = 0

Ответ 8

Просто, чтобы доказать, что я действительно нереформированный JAPH регулярные выражения - это путь!

import re
q="".join(lst)
for x in re.finditer('.{,5}',q)
  print x.group()

Ответ 9

Если вы работаете над итерируемым (например, файлом), который потенциально слишком велик для размещения в ОЗУ, вы можете использовать что-то вроде этого:

from itertools import izip_longest
def chunker(iterable, n, fillvalue=None):
    """Like an itertools.grouper but None values are excluded.

    >>> list(chunker([1, 2, 3, 4, 5], 3))
    [[1, 2, 3], [4, 5]]
    """
    if n < 1:
        raise ValueError("can't chunk by n=%d" % n)
    args = [iter(iterable)] * n
    return (
        [e for e in t if e is not None]
        for t in izip_longest(*args, fillvalue=fillvalue)
    )

with open('some_file') as f:
    for row in chunker(f, 5):
        print "".join(row)

Если RAM не является соображением, ответ ZdaR предпочтительнее, поскольку он значительно быстрее.

Ответ 10

Я думаю, что самый чистый способ написать это было бы

list=['a','b','c','d','e','f','g','h', 'i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']

for i in range(0, len(list), 5):
    print(*list[i:i+5], sep='')

Ответ 11

Python 3+ простой способ

lst=['a','b','c','d','e','f','g','h','i','j','k','l','m',
     'n','o','p','q','r','s','t','u','v','w','x','y','z']

for ind, smb in enumerate(lst):
    print(smb, end='')
    if ind%5 == 4: 
        print('\n')