Как напечатать каждый n-й индекс списка Python на новой строке?


1

Я пытаюсь распечатать список, и для каждых 5 индексов выводится новая строка. Так, например, если у меня есть:

  [1,2,3,4,5,6,7,8,9,10]

результат будет:

  1 2 3 4 5
  6 7 8 9 10

Я попробовал это до сих пор:

   lst = [1,2,3,4,5,6,7,8,9,10]

   for i in lst:
       if len(lst) > 5:
          print(lst,'\n')

но все, что я получаю, это:

   [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 

   [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 

   [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 

   .......

Как я мог это сделать?

Спасибо за помощь!


Каков ваш результат, если len(list)он не делится на ваш индекс?
Примуса

Ответы:


2

Попробуй это:

a = [1,2,3,4,5,6,7,8,9,10]
for i in [a[c:c+5] for c in range(0,len(a),5) if c%5 == 0]:
    print(*i)

вывод будет:

1 2 3 4 5
6 7 8 9 10

Также вы можете заменить 5любое другое число или переменные.


Привет, вы не против, если я использую *iаргумент распаковки для форматирования в моем ответе? Это намного лучше, чем ток, который " ".join()у меня сейчас идет
Примуса

@Primusa Конечно, все в порядке, я также проголосую за твой ответ.
Мехрдад Педрамфар

Нет проблем @Primusa, я не думаю , что это хорошо , если вы смотрите на sep=в printфункции тоже. это хорошо. что-то вроде этого print(*i, sep='-')он напечатает:1-2-3-4-5
Mehrdad Pedramfar

2

Используется для цикла с шагом:

n_indices = 5
lst = [1,2,3,4,5,6,7,8,9,10]

for i in range(0, len(lst), n_indices):
    print(lst[i:i+n_indices])

>>>[1, 2, 3, 4, 5]
>>>[6, 7, 8, 9, 10]

Если вы хотите больше разбираться в форматировании, вы можете использовать распаковку аргументов следующим образом: print(*list[i:i+n_indices])и получить результаты в следующем формате:

1 2 3 4 5
6 7 8 9 10

Я предполагаю , что он хочет форматированный вывод только .join: печать (»» .join (LST [я: я + индексы]) ... будет хорошо для него :)
Puneet Синха

0

Вы можете использовать ниже код: -

for i in range(0,len(a),5):
    print(" ".join(map(str, a[i:i+5])))

Это даст вам желаемый результат.

Код Снип


0

Немного идиоматичнее других ответов:

n = 5
lst = [1,2,3,4,5,6,7,8,9,10]

for group in zip(*[iter(lst)] * n):
    print(*group)

1 2 3 4 5
6 7 8 9 10

Для больших списков это также намного быстрее:

In [1]: lst = range(1, 10001)

In [2]: n = 5

In [3]: %%timeit
    ...: for group in zip(*[iter(lst)] * n):
    ...:     group
    ...:
236 µs ± 49.7 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

In [4]: %%timeit
    ...: for i in range(0, len(lst), n):
    ...:     lst[i:i+n]
    ...:
1.32 ms ± 184 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.