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

Итак, в основном у меня есть список многих точек, и я хочу извлечь только уникальные значения. Я написал функцию, но у меня есть 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»,

14 Задание: Типы данных и структуры данных Python для DevOps
14 Задание: Типы данных и структуры данных Python для DevOps
проверить тип данных используемой переменной, мы можем просто написать: your_variable=100
Python PyPDF2 - запись метаданных PDF
Python PyPDF2 - запись метаданных PDF
Python скрипт, который будет записывать метаданные в PDF файл, для этого мы будем использовать PDF ридер из библиотеки PyPDF2 . PyPDF2 - это...
Переменные, типы данных и операторы в Python
Переменные, типы данных и операторы в Python
В Python переменные используются как место для хранения значений. Пример переменной формы:
Почему Python - идеальный выбор для проекта AI и ML
Почему Python - идеальный выбор для проекта AI и ML
Блог, которым поделился Harikrishna Kundariya в нашем сообществе Developer Nation Community.
Как автоматически добавлять котировки в заголовки запросов с помощью PyCharm
Как автоматически добавлять котировки в заголовки запросов с помощью PyCharm
Как автоматически добавлять котировки в заголовки запросов с помощью PyCharm
Анализ продукта магазина на Tokopedia
Анализ продукта магазина на Tokopedia
Tokopedia - это место, где продавцы могут продавать свои товары. Товар должен быть размещен на витрине, чтобы покупателям было легче найти товар...
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

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