Краткое резюме статей для получения конкретного элемента из списка:
- Получить элементы по индексу
- Используйте оператор
[]
С указателем элемента - Используйте метод списка
поп (индекс)
- Используйте нарезку
lst [Старт: Стоп: Шаг]
Чтобы получить несколько элементов одновременно - Используйте функцию
itemgetter ()
от модуля оператора
- Используйте оператор
- Получить элементы по состоянию
- Используйте
Фильтр ()
функция - Используйте заявление о понимании списка
- Используйте
Списки Python, безусловно, принадлежат к должен знать для любого разработчика Python. Они позволяют вам эффективно хранить, итерации и управлять данными и с очень небольшим количеством кода. Тем не менее, есть еще один важный список темы: как доступа к элементам списка?
В первой части этой статьи вы узнаете все возможные способы получения конкретных элементов из списка. Во второй части вы увидите, как применять теорию на практические вопросы.
Давайте возьмем в качестве примера список PS, содержащие точки из 2D-пространства. Если вам нужен больше фона в списках, я хочу порекомендовать вам эту статью.
Получить определенные элементы из списка по индексу
Чтобы получить доступ к любому элементу в списке, используйте оператор кронштейнов с индексом элемента, который вы хотите получить. Например. Если мы хотим получить доступ к точке (4, 5) из нашего списка PS
мы пишем:
# list of points from the 2D space ps = [(2, 4), (-1, 7), (4, 5), (3, -4), (-1, -5)] point = ps[2]
Индексы начинаются с 0, поэтому индекс третьего элемента – 2. В Python также можно рассчитывать от спины перед использованием отрицательных индексов. Это очень удобно, особенно для извлечения последнего или второго последнего элемента. Индекс последнего элемента списка –1, индекс второго последнего –2 и так далее.
Попробуйте:
Получить определенные элементы из списка, используя POP ()
Если вы хотите получить доступ и удалить элемент из списка, вызовите метод POP () с помощью индекса элемента. Если вы не передадите значение для индекса, метод POP () возвращается и удаляет последний элемент из списка. Вот как вы получаете и удалите элемент (4, 5) с помощью метода POP ():
# list of points from the 2D space ps = [(2, 4), (-1, 7), (4, 5), (3, -4), (-1, -5)] item = ps.pop(2) print(ps) # [(2, 4), (-1, 7), (3, -4), (-1, -5)]
Теперь переменная Предмет имеет значение (4, 5).
Получить определенные элементы из списка с нарезкой
Чтобы получить непрерывный диапазон элементов из списка, используйте нарезку. Нарезка также использует оператор кронштейнов с начальным и концевым индексом. Как код выглядит следующим образом:
ps = [(2, 4), (-1, 7), (4, 5), (3, -4), (-1, -5)] items = ps[2:4]
Где первое число до толстой кишки (:) – индекс запуска и второй номер, После толстой кишки является конечным индексом. Индекс запуска включен, конечный индекс исключен. В нашем примере Предметы [2: 4]
Индекс Start 2 раза, конечный индекс 4. Поскольку индекс запуска включен, мы получаем элементы в индексах 2 и 3. Конечный индекс не включен, поэтому элемент на индекса 4 не включен. Таким образом, значение переменной Предметы
будет [(4, 5), (3, -4)]
С нарезкой вы можете использовать третий шаг параметра, чтобы получить элементы в диапазоне с регулярными расстояниями. Узнайте больше о нарезке в нашей подробной статье.
itemgetter ()
Оператор модуля предоставляет функцию itemGetter, которая позволяет вам одновременно получить доступ к нескольким элементам из списка. Вот код:
from operator import itemgetter ps = [(2, 4), (-1, 7), (4, 5), (3, -4), (-1, -5)] got = itemgetter(0, 2, 3)(ps)
После этой строки переменная получила элементы из индексов 0, 2, 3 в качестве кортежа.
Получить элементы из списка с помощью фильтра ()
В решениях мы обсуждали ранее, мы использовали индексы, чтобы получить элементы из списка. Другая возможность состоит в том, чтобы получить элементы из списка определенным условием. Например, мы могли бы захотеть получить все элементы из списка PS, которые имеют расстояние 6,0 или более от (0, 0). Поскольку мы не знаем индексов этих элементов, мы не можем использовать решение, требующее индексов. Python предоставляет встроенный функцию под названием Filter (). Метод Filter () требует двух параметров: функция, который возвращает TRUE/FALSE и ITERABLE. Функция FILTER () применяет функцию к каждому элементу от передового и удерживает только элементы, для которых функция вернула true.
Используя функцию Filter (), мы можем получить все элементы с расстоянием более 6,0 от (0, 0), как это:
def dist(x): return (x[0] ** 2 + x[1] ** 2) ** 0.5 ps = [(2, 4), (-1, 7), (4, 5), (3, -4), (-1, -5)] filtered = list(filter(lambda x: dist(x) > 6.0, ps))
Как вы можете видеть в коде, результат функции фильтра () должен быть преобразован обратно в список.
Список понимания с условием
Нужен фон в списке понимание? Читать дальше здесь.
Другой способ получить все элементы из списка, который удовлетворяет определенное условие, является пониманием списка. Алгоритм понимания списка называется линейным поиском. Линейный поиск илетет через вход один раз и добавляет все элементы, которые удовлетворяют условию нового списка. В нашем примере, где мы хотели получить все точки из списка PS, расстояние от (0, 0) больше 6,0 нам нужен следующий код:
def dist(x): return (x[0] ** 2 + x[1] ** 2) ** 0.5 ps = [(2, 4), (-1, 7), (4, 5), (3, -4), (-1, -5)] filtered = [p for p in ps if dist(p) > 6.0]
Попробуй сам:
Приложения
В этом разделе мы хотим немного расширить объем и посмотреть, как мы можем применить решения, представленные выше. Поэтому мы выбрали некоторые распространенные проблемы.
Получить конкретные индексы из списка
Чтобы получить все показатели подмножества предметов, которые удовлетворяют определенному условию, используйте список списка:
def dist(x): return (x[0] ** 2 + x[1] ** 2) ** 0.5 ps = [(2, 4), (-1, 7), (4, 5), (3, -4), (-1, -5)] filtered = [idx for idx, p in enumerate(ps) if dist(p) > 6.0]
Получить конкретные строки из файла
Предположим, вы хотите получить все комментарии из файла кода. Опять же, я предлагаю использовать понимание списка и для анализа каждой строки регулярное выражение.
import re pattern = r'^#.*$' comments = [line for line in open('code.py') if re.match(pattern, line)]
Если вы хотите узнать больше о чтенияных линиях из файла, эта статья может быть для вас.
Получить конкретную часть строки
Получить определенную часть строки или подстроки, используйте нарезку. Например, получите подстроку от 3 до 9 из строки «Python Cool!».
s = 'Python is cool!' substring = s[3:10]
Получить конкретные ключи от Dict
Несмотря на то, что эта тема может быть больше в объеме словарей, я хотел бы упомянуть, что, преобразовав словарь в список, вы получаете список клавиш словаря. И теперь мы вернемся к теме получения конкретных элементов из списка.
Для более продвинутых проблем используйте элементы метода словаря (). Например, чтобы получить все ключи, значение которой является гласным:
d = {0:'a', 1:'b', 2:'c', 3:'d', 4:'e'} vowels = [key for key, item in d.items() if item in 'aeiou']
Узнайте все о словарях Python здесь!
Вывод
Если вы хотите получить определенные элементы из списка в Python, у вас есть несколько возможностей для этого. Вы можете группировать эти решения на две группы:
- Получить элементы по индексу
- Используйте оператор [] с индексом элемента
- Используйте метод списка POP (индекс)
- Используйте нарезку (LST [Пуск: Stop: Step]), чтобы получить несколько элементов одновременно
- Используйте элемент функции () из модуля оператора
- Получить элементы по состоянию
- Используйте функцию фильтра ()
- Используйте понимание списка
В любом случае важно для любого опыта Python Programmer для мастера этих разных решений.