Рубрики
Без рубрики

Как разделить список в равномерно размеренные куски?

В этой статье вы узнаете, как разделить список в одинаково размеренные куски в Python. Пошаговой шаг, вы прибудете в следующий код, чтобы кусок вашего списка в частично размером: идите вперед и играйте с кодом, но если вам нужны некоторые объяснения, прочитайте, потому что я объясню это вам Очень подробно: … Как разделить список в равномерно размером кусочки? Прочитайте больше “

Автор оригинала: Lukas.

В этой статье вы узнаете, как разделить список в одинаково размеренные куски в 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 часа от дома и наслаждаться остальными часами), проводить время с людьми, которых вы любите делать вещи, которые вам нравится делать Отказ

Стать питоном фрилансером сейчас!