Формат печати Python для целых чисел и сочетания строк

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

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
221
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

попробуй это

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)

Этот код работает - для оригинального "задания" (вопроса). Однако это не очень похоже на Python и не использует лучшие возможности Python. Я чувствую, что это проблема. не лучший способ выучить язык. (Всего мои 0,02 доллара!)

Daniel Hao 17.12.2020 17:01

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

Delton 17.12.2020 17:54

без обид. Просто говорите с «учебной точки зрения». Это для оригинального автора. При изучении нового языка полезно выбрать «лучшие» функции для работы. Ведь "батарейки" у него куча ;-))

Daniel Hao 17.12.2020 18:16

Спасибо, я новичок, но если у вас, ребята, есть лучшее решение, вперед.

Bryan Hildreth 17.12.2020 21:02

Поможет ли это вам: (наконец, вы можете изменить окончательную конкатенацию по своему усмотрению с точки зрения формата...)


    >>> 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 добавляет текущее значение после непоследовательности.

Другие вопросы по теме