line = [1,2,3,4,5,6,7,9,10,11,12,14,15,16,17,18,19,300]
GroupCount = 0
FormatDesignators =line[0]
for i in range(1 ,len(line)):
if line[i] != line[i - 1] + 1:
if GroupCount >= 1:
FormatDesignators = FormatDesignators,'-', line[i - 1]
FormatDesignators = FormatDesignators,',',line[i]
GroupCount = 0
else:
GroupCount = GroupCount + 1
print(FormatDesignators)
if GroupCount >= 1:
FormatDesignators = FormatDesignators,"-",line[i]
print (FormatDesignators)
Сейчас выдает:
((((((1, '-', 7), ',', 9), '-', 12), ',', 14), '-', 19), ',', 300) а я хочу чтобы было 1-7,9-12,14-19300






попробуй это
line = [1,2,3,4,5,6,7,9,10,11,12,14,15,16,17,18,19,300]
GroupCount = 0
FormatDesignators =line[0]
for i in range(1 ,len(line)):
if line[i] != line[i - 1] + 1:
if GroupCount >= 1:
FormatDesignators = f'{FormatDesignators} - {line[i - 1]},'
FormatDesignators = f'{FormatDesignators} {line[i]}'
GroupCount = 0
else:
GroupCount = GroupCount + 1
print(FormatDesignators)
if GroupCount >= 1:
FormatDesignators = f'{FormatDesignators} - {line[i]},'
print (FormatDesignators)
Я не беспокоюсь об изменении кода, просто хотел получить правильный синтаксис вывода, поэтому просто отредактировал исходный код, чтобы убедиться, что он работает.
без обид. Просто говорите с «учебной точки зрения». Это для оригинального автора. При изучении нового языка полезно выбрать «лучшие» функции для работы. Ведь "батарейки" у него куча ;-))
Спасибо, я новичок, но если у вас, ребята, есть лучшее решение, вперед.
Поможет ли это вам: (наконец, вы можете изменить окончательную конкатенацию по своему усмотрению с точки зрения формата...)
>>> line = [1,2,3,4,5,6,7,9,10,11,12,14,15,16,17,18,19,300]
>>> starts = [x for x in line if x-1 not in line]
>>> ends = [y for y in line if y+1 not in line]
>>> ranges = list((a,b) for a, b in zip(starts, ends))
>>> ranges
[(1, 7), (9, 12), (14, 19), (300, 300)]
>>> results = [str(a)+'-'+str(b) for a, b in ranges]
Кажется, работает следующий подход. Я пытался сделать что-то, что повторяло данные только один раз:
c = 0
result = ''
current = None
run = False
while c < len(line):
if current == None:
result += f'{line[c]}'
elif line[c] - current == 1:
run = True
if c == len(line) - 1:
result += f'-{line[c]}'
elif run:
result += f'-{current},{line[c]}'
run = False
else:
result += f',{line[c]}'
current = line[c]
c += 1
print(result)
# 1-7,9-12,14-19,300
Первый if проверяет, не видели ли числа, т.е. только для первого числа. Второй if отмечает, что текущее целое число на единицу больше предыдущего, а также обрабатывает, когда достигается конец line, и продолжает последовательность. Третий отмечает, что последовательность была нарушена, и добавляет вывод как таковой. Последний блок else добавляет текущее значение после непоследовательности.
Этот код работает - для оригинального "задания" (вопроса). Однако это не очень похоже на Python и не использует лучшие возможности Python. Я чувствую, что это проблема. не лучший способ выучить язык. (Всего мои 0,02 доллара!)