В этой статье вы узнаете, как разделить список в одинаково размеренные куски в Python. Пошаговый шаг, вы приедете к следующему коду для куска вашего списка в частями равномерно размером:
Идите вперед и играйте с кодом самостоятельно, но если вам нужны некоторые объяснения, прочитайте, потому что я объясню это вам подробно:
Постановка проблемы
Проблема : Представьте, что у вас есть датчик температуры, который отправляет данные каждые 6 минут, что составляет 10 точек данных в час. Все эти точки данных хранятся в одном Список на каждый день.
Теперь мы хотим иметь список почасовых средних температур для каждого дня – поэтому нам нужно разделить список данных на один день в равномерно размеры кусочки Отказ
Обновление вашего списка
Чтобы кусок вашего списка в последовательные части размера N
Используйте для петли Итерации за каждый N
–й индекс с использованием Python’s Встроенный Функция Диапазон (0, len (данные), chunk_length)
Отказ Затем используйте индекс Я
В качестве исходного положения, чтобы получить то же количество последовательных элементов из каждой стартовой позиции, используя Нарезание Python особенность данные [I: i + chunk_length]
Отказ
Вот код:
data = [15.7, 16.2, 16.5, 15.9, ..., 27.3, 26.4, 26.1, 27.2] chunk_length = 10 for i in range(0, len(data), chunk_length): print(data[i:i+chunk_length])
Функция фонового диапазона ()
Диапазон ()
Функция может использоваться либо с одним, двумя или тремя аргументами.
- Если вы используете его одним единый аргумент , Е.Г.,
Диапазон (10)
, мы получаем объект диапазона, содержащий номера от 0 до 9. Итак, если вы вызовите диапазон с одним аргументом, этот аргумент будет интерпретироваться как значение стоп-памяти диапазона, но он исключается из диапазона. - Вы также можете позвонить в
Диапазон ()
Функция с Две аргументы , Е.Г.,Диапазон (5, 10)
Отказ Этот вызов с двумя аргументами возвращает объект диапазона, содержащий количество 5 до 9. Итак, теперь у нас есть нижняя и верхняя граница для диапазона. Вопреки значение остановки, начальное значение включено в диапазон. - При вызове функции
Диапазон ()
с три аргумента Первый параметр – это начальное значение, второе значение – это значение стоп, а третье значение – это размер шага. Например,Диапазон (5, 15, 2)
Возвращает объект диапазона, содержащий следующие значения: 5, 7, 9, 11, 13. Как вы можете видеть, диапазон начинается с начала, а затем он добавляет значение шага до тех пор, пока значения меньше значения стоп-сигнала.
В нашей проблеме наши кусочки имеют длину 10, начальное значение равно 0, а максимальное значение является концом списка данных.
Итак, если вы звоните Диапазон (0, Len (данные), 10)
, это будет итерации за стартовые индексы кусков. Давайте разместим некоторые цифры, чтобы использовать это:
За один день у нас есть длина данных 24 *, поэтому вызов функции диапазона будет так: Диапазон (0, 240, 10)
И результирующий диапазон будет 0, 10, 20, 30, …, 230. Приоритет момент и рассмотрим эти значения: они представляют собой индексы первого элемента каждого хлопада.
Так что мы имеем сейчас? Начало индексов каждого куска, а также длина – и это все, что нам нужно нарезать входные данные в куски, которые нам нужны.
Фон нарезка
Оператор нарезки занимает два или три аргумента, отделенными колонкой :
символ. Они имеют одинаковое значение, что и в функции диапазона.
Нарезка – это концепция, чтобы вырезать подстроку из данной строки. Используйте нотацию нарезки S [Старт: Стоп: Шаг]
Для доступа к каждому шаг
-ный элемент, начиная с индекса Начать
(включая) и заканчивая индекс Стоп
(Исключенный). Все три аргумента являются необязательными, поэтому вы можете пропустить их для использования значений по умолчанию ( Start = 0
, Stop = Len (lst)
, Step = 1
). Например, выражение S [2: 4]
из струны «Привет»
выкрой ломтик «Я»
и выражение S [: 3: 2]
выкрой ломтик 'HL'
Отказ
Если вы хотите узнать больше о нарезке, прочитайте нашу подробную статью здесь. Не стесняйтесь также смотреть наше фоновое видео на нарезке Python
Однако мы все еще можем улучшить этот код и сделать его многоразовым путем создания генератора из него.
Часть с выражениями генератора
А Генератор это функция, но вместо оператора возврата он использует ключевое слово доходность
Отказ
Ключевое слово . доходность
прерывает функцию и возвращает значение. В следующий раз функция вызывается, возвращается следующее значение, и выполнение функции снова останавливается. Такое поведение может использоваться в контуре для цикла, где мы хотим получить значение от генератора, работать с этим значением внутри цикла, а затем повторить его с помощью следующего значения. Теперь давайте посмотрим на улучшенную версию нашего кода:
data = [15.7, 16.2, 16.5, 15.9, ..., 27.3, 26.4, 26.1, 27.2] chunk_length = 10 def make_chunks(data, length): for i in range(0, len(data), length): yield data[i:i+length] for chunk in make_chunks(data, chunk_length): print(chunk)
Это выглядит уже симпатичным пифитоном, и мы можем повторно использовать функцию make_chunks ()
Для всех остальных данных нам нужно обрабатывать.
Пример усреднение по чанкам
Давайте закончим код, чтобы мы получили список почасовых средних температур в результате.
import random def make_chunks(data, length): for i in range(0, len(data), length): yield data[i:i + length] def process(chunk): return round(sum(chunk)/len(chunk), 2) n = 10 # generate random temperature values day_temperatures = [random.random() * 20 for x in range(24 * n)] avg_per_hour = [] for chunk in make_chunks(day_temperatures, n): r = process(chunk) avg_per_hour.append(r) print(avg_per_hour)
И вот и это, этот крутой питон код решает нашу проблему. Мы можем сделать код еще немного короче, но я считаю этот код менее читаемым, потому что вам нужно знать действительно продвинутые концепции Python.
import random make_chunks = lambda data, n: (data[i:i + n] for i in range(0, len(data), n)) process = lambda data: round(sum(data)/len(data), 2) n = 10 # generate random temperature values day_temperatures = [random.random() * 20 for x in range(24 * n)] avg_per_hour = [] for chunk in make_chunks(day_temperatures, n): r = process(chunk) avg_per_hour.append(r) print(avg_per_hour)
Итак, что же нам делать? Мы сократили функции помощника в лямбдах выражениями и для генераторной функции, мы используем специальные сокращение – скобки.
Резюме
Мы использовали диапазон функцию с тремя аргументами, Начать ценность, Стоп Значение и шаг
Куда пойти отсюда?
Хотите начать зарабатывать на полный рабочий день с Python – пока работаю только неполный рабочий день? Затем присоединяйтесь к нашему бесплатным Python Freelancer Webinar Отказ
Он точно показывает, как вы можете вырастить свой бизнес и навыки Python в точку, где вы можете работать комфортно на 3-4 часа от дома и наслаждаться остальными часами), проводить время с людьми, которых вы любите делать вещи, которые вам нравится делать Отказ
Стать питоном фрилансером сейчас!