Как разделить список на две части по определенному индексу?
Есть два списка с элементами, в первом множество значений, например — [100,200,1200,1500,2000] , во втором одно значение [2] . Как разделить первый список на две части, что бы в первой части оказались все элементы списка до индекса 2 — (цифра из второго списка) а в другом списке все элементы с индексами >= 2? На входе:
y=[100,200,1200,1500,2000]; z=[2]
y1=[100,200]; y2=[1200,1500,2000]
Отслеживать
1,644 4 4 золотых знака 8 8 серебряных знаков 18 18 бронзовых знаков
Разделите список на куски заданного размера в Python
В этом посте будет обсуждаться, как разбить список на куски заданной длины. n в Python.
Input: [1, 2, 3, 4], n = 2
результат: [[1, 2], [3, 4]]
Если длина последовательности не делится без остатка на заданную длину, мы должны заполнить последний раздел остатками элементов.
Input: [1, 2, 3, 4, 5], n = 2
результат: [[1, 2], [3, 4], [5]]
Ниже приведены различные способы разделения списка на фрагменты равной длины в Python:
1. Использование нарезки
Простое решение состоит в том, чтобы написать генератор, который последовательно выдает фрагменты заданного размера из списка. Этого легко добиться с помощью нарезки, как показано ниже:
Разбить список на равные части в Python 3
В этой статье я рассмотрю способы, с помощью которых можно разбить список на части четкого размера на основе пользовательских методов или с помощью встроенных модулей.
Введение
Разбиение строк и списков — это типичная задача программиста. Иногда нам приходится разбивать наши данные особым образом, но чаще — на равные части.
Язык не имеет встроенной функции для этого, и в этом уроке я покажу, как разбить список в Python.
В большинстве случаев это можно сделать с помощью генераторов:
def func(lst, n): for i in range(0, len(lst), n): yield lst[i:i + n]
Хотя есть и другие интересные способы сделать это, каждый со своими плюсами и минусами!
На равные части из n элементов
Список может быть разделен на основе размера определенного фрагмента. Это означает, что мы можем определить размер данной части. Если подмножество списка не вписывается в размер определенного фрагмента, заполнители должны быть вставлены вместо пустых держателей элементов. В этих случаях я буду использовать функцию None.
Давайте создадим новый файл и начнем программирование:
def func_chunk(lst, n): for x in range(0, len(lst), n): e_c = lst[x : n + x] if len(e_c) < n: e_c = e_c + [None for y in range(n - len(e_c))] yield e_c print(list(func_chunk([9, 8, 7, 6, 5, 4, 3, 2, 1], 3)))
Приведенная выше функция func_chunk принимает аргументы: lst для списка и chunk_size для числа, на которое его нужно разделить. Функция выполняет итерацию по списку с приращением размера фрагмента n.
Ожидается, что каждый фрагмент будет иметь размер, заданный в качестве аргумента. Если элементов недостаточно для разделения на один и тот же размер, оставшиеся неиспользуемые элементы заполняются None.
[[9, 8, 7], [6, 5, 4], [3, 2, 1]]
Список был разделен на равные части по 3 элемента в каждой.
Python имеет утилиты для упрощения этого процесса. Мы можем использовать функцию zip_longest из itertools для упрощения предыдущей функции.
Давайте создадим новый файл и напишем следующий код:
from itertools import zip_longest def func_chunk_itertools(lst): i_ = iter(lst) return list(zip_longest(i_, i_, i_, i_)) print(func_chunk_itertools([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]))
Этот код повторяет элементы и возвращает фрагмент желаемой длины на основе предоставленных вами аргументов.
Мы поместили в коде 4 аргументf i_. Функция zip_longest агрегирует и возвращает элементы из каждой итерации. В этом случае она будет агрегировать элементы из списка, который повторяется 4. Затем создается множество итераторов, содержащих 4 последовательных элементов, которые после преобразуются в список и возвращаются.
Вывод программы будет таков:
[(0, 1, 2, 3), (4, 5, 6, 7), (8, 9, 10, 11), (12, 13, 14, None)]
Эта более короткая функция приводит к тому же выводу программы. Однако этот метод более ограничен, так как нам приходится вручную писать, сколько элементов мы хотим в коде, и немного неудобно просто помещать кучу i_ в вызов zip_longest.
Лучшим решением было бы использование генераторов. Давайте создадим новый файл:
def func_chunks_generators(lst, n): for i in range(0, len(lst), n): yield lst[i : i + n] print( list( func_chunks_generators( [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 8, 7, 6, 54, 3, 2, 2, 1], 4 ) ) )
Этот генератор дает подсписок, содержащий n элементов. В конце концов, это дало бы подсписок для каждой части.
[[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 8, 7], [6, 54, 3, 2], [2, 1]]
Этот метод работает лучше всего, если вам не нужно заполнение кода с помощью None или иным образом.
На n равных частей
В предыдущем разделе мы разбили список на основе размера отдельных фрагментов так, чтобы каждый фрагмент имел одинаковое количество элементов. Есть и другой способ интерпретировать эту проблему.
Что мы делаем, когда хотим разбить список не по количеству элементов в каждом фрагменте, а по количеству фрагментов, которые мы хотим создать?
Например, вместо того, чтобы разбивать список на части, где каждая часть имеет 7 элементов, мы хотим разбить список на 7 равных частей. В этом случае мы можем не знать размер каждой части.
Логика аналогична предыдущим методам, однако размер части — это предельное значение длины списка, деленное на количество требуемых частей. Как и в предыдущих примерах кода, если в части есть свободные места, они будут заполнены значением None:
import math def func_chunks_num(lst, c_num): n = math.ceil(len(lst) / c_num) for x in range(0, len(lst), n): e_c = lst[x : n + x] if len(e_c) < n: e_c = e_c + [None for y in range(n - len(e_c))] yield e_c print(list(func_chunks_num([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], c_num=3)))
Мы определяем, сколько списков нам нужно создать и сохранить это значение в n. Затем мы создаем подсписок для двух элементов одновременно, заполняя выходные данные в случае, если размер нашего фрагмента меньше желаемой длины.
[[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, None]]
Как видно из приведенных выше выходных данных, список был разделен на 3 отдельных подспискf равных размеров на основе предоставленного аргумента c_num.
Заключение
В этой статье мы рассмотрели способы, с помощью которых можно разбить список на части равного размера на основе пользовательских методов и с помощью встроенных модулей.
Методы, упомянутые в этой статье, не ограничиваются теми, которые были прописаны здесь, но есть множество других творческих способов, с помощью которых вы также можете разделить свой список на равные части!
Разбить список
Здравствуйте! Нужно разбить произвольный список на минимальное кол-во отрезков, причем отрезок должен состоять из чисел, каждое из которых не меньше длины этого отрезка. Я напечатал такой код, но он, как я понимаю, имеет сложность О(n), очень неэффективен по времени, может есть алгоритм без перебора?
1 2 3 4 5 6 7 8 9 10 11
aa = [] a, answ, _a = list(list(map(int, input().split()))), [], [] while a: if min(a[0], min(_a) if _a else a[0]) >= len(_a) + 1: _a.append(a.pop(0)) else: answ.append(_a) _a = [] answ.append(_a) aa.append([str(len(answ)), str(answ)]) print(aa)
Добавлено через 4 минуты
пример работы:
1 3 3 3 2
[['3', '[[1], [3, 3, 3], [2]]']]
то есть 1 3 3 2 можно разбить на 3 отрезка 1, 3 3 3, 2
Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Разбить список списков на список
Здравствуйте! Каким образом разбить список списков на список? Имеется список типа: , , , , , .

Разбить список на части
Добрый вечер! Помогите решить проблему users = def json_list(self, list): lst = .

Разбить список по разделителю
Дано: list = (т.е. между элементами есть пустые элементы-разделители) Нужно получить: result =.

Разбить список на 2 подсписка
ребят помогите написать код пожалуйста: разбить список, состоящий из натуральных чисел, на два.
Разбить строку в список
привет. есть строка a=u'здесь очень длинный текст который надо разбить' как бы мне его разделить.
Status 418
![]()
4356 / 2254 / 589
Регистрация: 26.11.2017
Сообщений: 5,186
Записей в блоге: 3

Сообщение было отмечено alilxxey как решение
Решение
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Разбить список по n элементов
есть список, допустим list= надо разбить, допустим по 3: list2=. ] при этом len(list) не.

Разбить список и словарь на колонки в df
Здравствуйте, я совсем пока новичок в питоне. Помогите оптимизировать код для выбора нужных.

Разбить список на подсписки заданной длины
Доброго времени суток, как решить задачу : разбить список на определенное количество подсписков по.

Список строк разбить на отдельные массивы и сгруппировать по индексам
Добрый день. Считываю файл построчно, разбивая на массивы строк. date = with.
Разбить список строк
Добрый день. Подскажите пожалуйста как напечатать построчно список состоящий из списков ? .
