Получение уникальных значений из списка в Python
Одной из распространенных задач при работе с данными в Python является получение уникальных значений из списка. Например, есть список, который содержит повторяющиеся элементы:
['яблоко', 'груша', 'банан', 'яблоко', 'груша', 'яблоко']
Цель — получить список, который содержит каждый элемент только один раз, т.е. убрать дубликаты:
['яблоко', 'груша', 'банан']
Рассмотрим подход, когда создается новый список и в него добавляются только те элементы, которых еще нет в этом списке:
fruits = ['яблоко', 'груша', 'банан', 'яблоко', 'груша', 'яблоко'] unique_fruits = [] for fruit in fruits: if fruit not in unique_fruits: unique_fruits.append(fruit) print(unique_fruits)
Этот подход работает, но не самый оптимальный. В Python есть встроенный тип данных set , который по определению содержит только уникальные элементы. Использование set позволяет сделать код более лаконичным и эффективным:
fruits = ['яблоко', 'груша', 'банан', 'яблоко', 'груша', 'яблоко'] unique_fruits = list(set(fruits)) print(unique_fruits)
Однако, стоит учесть, что set не сохраняет порядок элементов. Если порядок элементов важен, можно использовать dict.fromkeys() , который возвращает словарь, где ключи — это уникальные элементы списка. При этом сохраняется порядок добавления ключей:
fruits = ['яблоко', 'груша', 'банан', 'яблоко', 'груша', 'яблоко'] unique_fruits = list(dict.fromkeys(fruits)) print(unique_fruits)
Итак, были рассмотрены различные подходы к получению уникальных значений из списка в Python.
Поиск значений в списке в Python
Часто в процессе работы с Python возникает необходимость найти конкретное значение в списке. Учитывая, что в Python список является одной из основных структур данных, такая задача встречается довольно часто. Например, может возникнуть необходимость проверить, есть ли определенный элемент в списке чисел или строк.
my_list = [1, 2, 3, 4, 5] item = 3
Наиболее простым и «pythonic» способом проверить наличие элемента в списке является использование оператора in . Если элемент присутствует в списке, оператор in вернет True , в противном случае — False .
if item in my_list: print("Desired item is in list")
Однако, этот метод не подскажет о местоположении элемента в списке. Для определения индекса элемента можно использовать метод .index() . Если элемент присутствует в списке, метод вернет индекс первого вхождения элемента, в противном случае будет сгенерировано исключение ValueError .
try: index = my_list.index(item) print(f"Item is at index ") except ValueError: print("Item is not in the list")
Важно помнить, что оба этих метода ищут только первое вхождение элемента. Если в списке присутствует несколько одинаковых элементов и нужно найти все их индексы, потребуется более сложный код.
indexes = [i for i, x in enumerate(my_list) if x == item] print(f"Item is at indexes ")
В этом коде используется функция enumerate() , которая возвращает пары индекс-значение для элементов списка, и генератор списка для создания нового списка с индексами.
Таким образом, Python предоставляет различные способы для поиска элементов в списке, каждый из которых подходит для своих специфических задач.
Получение значения элемента по его индексу
Результатом будет значение i -го элемента последовательности sequence . Эту операцию еще называют «взятие элемента индексу».
- Индексирование последовательностей всегда начинается с 0 нуля, это означает, что бы получить значение первого элемента последовательности, например списка, нужно выполнить операцию sequence[0] .
- Если индекс i отрицателен, то индекс считается относительно конца последовательности sequence . В этом случае положительный индекс можно посчитать по формуле len(sequence) — i .
- Обратите внимание, что -0 по-прежнему будет 0 .
При попытке получить значение элемента с индексом, превышающим длину последовательности поднимается исключение IndexError .
Эта операция поддерживаются большинством типов последовательностей, как изменяемых, так и неизменяемых.
Примечание: Множества set не поддерживает индексирование элементов, т.к. это неупорядоченная коллекция без повторяющихся элементов. Но если все же необходимо получить значение элемента по индексу, то множество set необходимо преобразовать в список list или кортеж tuple . Например:
>>> mySet = set([1, 2, 3]) >>> list(mySet)[1] # 2
Примеры получения значения элемента по индексу.
>>> x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] >>> x[0] # 1 >>> x[4] # 5 >>> x[-1] # 10 >>> x[-4] # 7 # Проверка формулы len(sequence) - i >>> y = len(x) - 4 >>> x[y] # 7 # Индекс превышает длину последовательности >>> x[15] # Traceback (most recent call last): # File "", line 1, in # IndexError: list index out of range
- ОБЗОРНАЯ СТРАНИЦА РАЗДЕЛА
- Проверка существования значения в последовательности Python
- Конкатенация (сложение) последовательностей
- Увеличение последовательности в N раз
- Получение значения элемента по индексу sequence[i]
- Получение среза sequence[i:j]
- Получение среза с заданным шагом sequence[i:j:k]
- Вычисление длины последовательности
- Наименьшее значение последовательности Python
- Наибольшее значение в последовательности Python
- Метод последовательности index()
- Метод последовательности count()
Получить значение из списка-массива для условия: ошибка
Прочитал что это за ошибка — говорят, что обращение к числу типа 5[0], но я вывожу в print() те же значения, что нужны и для сравнения и там выводится нормальное число. Пробовал приводить к int все подряд, не получилось.
1 2 3
countTourists = touristsA[0][iter] print(str(countTourists)) while countTourists > 0: #так работает
Если менять таким образом, то работает. Помогите пожалуйста вроде не дураку, но новичку в Python. Спасибо заранее