Как избавиться от запятой в конце печати из цикла

Итак, в основном у меня есть список многих точек, и я хочу извлечь только уникальные значения. Я написал функцию, но у меня есть 1 проблема: как не печатать запятую в конце списка?

def unique(list1):
    unique_values = []
    for u in list1:
        if u not in unique_values:
            unique_values.append(u)
    for u in unique_values:
        print(u, end = ", ")


wells = ["U1", "U1", "U3", "U3", "U3", "U5", "U5", "U5", "U7", "U7", "U7", "U7", "U7", "U8", "U8"]
print("The unique values from list are...:", end = " ")
unique(wells)

мой вывод на данный момент: «Уникальные значения из списка...: U1, U3, U5, U7, U8»,

Почему в 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 может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
74
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Заменять:

    for u in unique_values:
        print(u, end = ", ")

с питоником:

    print(', '.join(unique_values))

Также, как правило, лучший стиль для

return unique_values
and use
print(', '.join(unique(wells)))
Ответ принят как подходящий

Это может быть излишним, но вы можете использовать NumPy «уникальный» метод, который, вероятно, более эффективен, особенно для больших массивов или длинных списков.

Подойдет следующий код:

import numpy as np
x = np.array(['a', 'a', 'b', 'c', 'd', 'd'])
y = np.unique(x)
print(', '.join(y))

и результат:

a, b, c, d

Добавлено в Edit: следующее решение работает и для нестроковых списков.

''' Print unique values in a list or numpy array '''

x = [1, 2, 2, 5, 7, 1, 3]
print(x)

# set(x) will return a set of the unique values of x
u = set(x)
print(u)

# remove the curly brackets
str_u = str(u).strip("}{")
print(str_u)

и результат

1, 2, 3, 5, 7

Вы можете использовать ', '.join(set(values)). Не нужно numpy

OneCricketeer 21.11.2022 18:16

Это решение работает, когда набор значений представляет собой набор или список строк.

Triceratops 21.11.2022 18:54

Я установил NumPy и все работает как задумано (спасибо!), но ....... как насчет ситуации, когда у меня есть точка, помеченная, например, как U10 или U20, я имею в виду, когда я добавляю точку выборки в список с номер > 10, он занимает позицию 2 в моем списке после печати и т. д., например: U1, U10, U20, U3, U30, U5, U7, U8 Однако мне бы хотелось, чтобы числа шли в «возрастающем» порядке после U, поэтому например: «U1, U3, U5, U7, U8, U10, U20, U30» - это то, что я ожидаю от своего вывода. Как я могу это устроить?

crtnnn 21.11.2022 19:04

@Triceratops ОП спрашивает о строках, не так ли?

OneCricketeer 21.11.2022 19:53

@crtnnn Порядок не сохраняется при поиске уникальных элементов. После этого необходимо повторно отсортировать данные.

OneCricketeer 21.11.2022 19:54

@OneCricketeer хорошо. Я думаю, что нашел решение на StackOverflow. Я использовал: sort = sorted(y, key=lambda x: int("".join([i for i in x if i.isdigit()]))) print(*sort, sep = ", ") и теперь мой вывод: U1, US2, U3, U5, U7, U8, U10, U20, U30

crtnnn 21.11.2022 20:45

@OneCricketeer В его исходном примере да, но я думаю, что лучше представить также более общее решение.

Triceratops 22.11.2022 08:45

Я бы не назвал numpy общим решением. ','.join(set(map(str, x))) работает со списком чисел. Не используйте замену строки

OneCricketeer 22.11.2022 16:03

надеюсь, приведенные ниже изменения помогут вам :)

def unique(list1):
    unique_values = []
    for u in list1:
        if u not in unique_values:
            unique_values.append(u)
    return unique_values


wells = ["U1", "U1", "U3", "U3", "U3", "U5", "U5", "U5", "U7", "U7", "U7", "U7", "U7", "U8", "U8"]
req = unique(wells)
# prints in list format
print(f"The unique values from list are...: {req}")
# prints in string format
print(f"The unique values from list are...: {' '.join(req)}")

или уникальные значения также можно узнать с помощью set(wells)

Здесь есть пара проблем: конечный ,, как указано в вопросе, проверка членства на несортированном list. Используйте str.join() для обработки завершающей запятой и даже не пытайтесь отслеживать уникальные значения и проверять, не было ли уже замечено новое значение, просто приведите к set.

def unique(list1):
    unique_values = set(list1)
    print(', '.join(sorted(unique_values)))


wells = ["U1", "U1", "U3", "U3", "U3", "U5", "U5", "U5", "U7", "U7", "U7", "U7", "U7", "U8", "U8"]
print("The unique values from list are...:", end = " ")
unique(wells)

Будет ли набор гарантировать одинаковую последовательность?

manassehkatz-Moving 2 Codidact 21.11.2022 18:27

Нет, setS неупорядочены. Чтобы OP отсортировал вывод, как в вопросе, set должен быть отсортирован.

Michael Ruth 21.11.2022 18:30

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