простой цикл Python, который делает новую строку, как только он читает новое значение - PullRequest
0 голосов
/ 19 марта 2019

Я новичок в питоне. Я пытаюсь применить цикл над отсортированным списком. идея заключается в том, что всякий раз, когда цикл считывает новое значение, отличное от предыдущего, он создает перед ним новую строку (я использую редактор - блокнот jupyter) что я пробовал это

d=[1,1,1,2,2,3,4,5,5,5]
for i in d:
  if i == d[i]:
     print(i)
  elif i != d[i]:
     print(i)
     print('\n')

Ожидаемый результат должен быть примерно таким:

1
1
1
*new line*
2
2
*new line*
3
*new line*
4
*new line*
5
5
5

но, к сожалению, этот код не справился с работой. Спасибо за вашу помощь, я ценю это.

Ответы [ 5 ]

2 голосов
/ 19 марта 2019

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

d=[1,1,1,2,2,3,4,5,5,5]
for i in range(len(d)-1):
   if d[i] == d[i+1]:
     print(d[i])
   else:
     print(d[i])
     print('\n')
print(d[i])

Выход:

1
1
1

2
2

3

4

5
5
5
1 голос
/ 19 марта 2019

Если текущий номер не равен предыдущему, напечатайте новую строку перед печатью элемента.

d=[1,1,1,2,2,3,4,5,5,5]

for i in range(len(d)):
  if i > 0 and d[i] != d [i - 1]:
      print('\n')
  print(d[i])
1 голос
/ 19 марта 2019

С вашим кодом вы используете i для итерации массива d, но затем используете i для доступа к элементу массива d[i], таким образом, i == d[i] будет истинно для первых трех итераций, затем после этого оно будет ложным (например, i = 2, d[2] = 1, следовательно, (i == d[i]) == False. Кроме того, нет необходимости в выражении elif, поскольку вас беспокоит только один случай. Используйте переменную, чтобы отслеживать предыдущий элемент в массиве, и это должно сработать.

d=[1,1,1,2,2,3,4,5,5,5]
temp = d[0]
for i in d:
  if temp != i:
     print('\n')
  print(i)
  temp = i

Редактировать: извините, неправильно прочитал код, объяснение должно быть лучше

1 голос
/ 19 марта 2019

Больше фантазии;groupby():

from itertools import groupby

d = [1,1,1,2,2,3,4,5,5,5]

for _, y in groupby(d):
    print('\n'.join(map(str, y)), end='\n\n')
1 голос
/ 19 марта 2019

Инициализируйте last переменную, чтобы отслеживать и выполнять итерацию по списку, печатая только новую строку, если элемент отличается от last

last = d[0]
for element in d:
   if element!=last:
      print('\n')
   last = element
   print(element)

Вывод

1
1
1

2
2

3

4

5
5
5
...