Как разбить массив на подмассивы
Перейти к содержимому

Как разбить массив на подмассивы

  • автор:

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

lxstvayne

Если есть ещё какие-нибудь интересные решения, можете приложить в комментарии к ответу.

Ответ написан более двух лет назад

Комментировать

Нравится 1 Комментировать

trapwalker

Сергей П @trapwalker Куратор тега Python

Программист, энтузиаст

Без сторонних либ я бы делал так:

def split0(arr: list) -> list: res = [[]] for x in arr: res[-1].append(x) if x else res.append([]) return res

А вот для любителей функциональщины:

from itertools import takewhile def split0(a): it = iter(a) return [[x for x in takewhile(bool, it)] for _ in range(a.count(0) + 1)]

Ответ написан более двух лет назад

Нравится 1 2 комментария

lxstvayne

В последнем решении есть небольшая опечатка, вот исправленный вариант:

from itertools import takewhile def split0(a): it = iter(a) return [[x for x in takewhile(bool, it)] for _ in range(a.count(0) + 1)]

trapwalker

Сергей П @trapwalker Куратор тега Python

Как разбить массив на несколько массивов js

Можно использовать метод reduce() для разделения исходного массива на несколько массивов, основываясь на некотором условии.

Пример. Разделим массив чисел на два массива — один сочетает в себе все четные числа, а другой — все нечетные числа.

const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]; const [evenNumbers, oddNumbers] = numbers.reduce( (acc, val) =>  acc[val % 2].push(val); return acc; >, [[], []] ); console.log(evenNumbers); // [2, 4, 6, 8] console.log(oddNumbers); // [1, 3, 5, 7, 9] 

Здесь мы использовали reduce() , чтобы создать два массива внутри массива acc , один для четных чисел и другой для нечетных. Затем мы проходим по каждому числу в исходном массиве и добавляем его в соответствующий массив внутри acc на основе остатка от деления на 2.

Затем мы деструктурируем результат reduce() в две переменные evenNumbers и oddNumbers , чтобы получить два отдельных массива, содержащих только четные и нечетные числа соответственно.

26 сентября 2022

Для того что бы получить «срез» массива, можно воспользоваться встроенным методом slice

const nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; console.log(nums.slice(3)); // Вывод: [ 4, 5, 6, 7, 8, 9, 10 ] console.log(nums.slice(2, 6)); // Вывод: [ 3, 4, 5, 6 ] console.log(nums.slice(-2)); // Вывод: [ 9, 10 ] console.log(nums.slice()); // Вывод: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 

Для того чтобы «нарезать» массив на одинаковые части, можно воспользоваться методом chunk из библиотеки lodash:

_.chunk(['a', 'b', 'c', 'd'], 2); // Вывод: [['a', 'b'], ['c', 'd']] _.chunk(['a', 'b', 'c', 'd'], 3); // Вывод: [['a', 'b', 'c'], ['d']] 

Курсы javascript

Добрый день , прошу помощи . Как составить цикл, чтобы разбить массив на подмассивы .
Дано arr= [1,2,4,7,1,6,2,8]
Нужно получить arr_new=[[8,2],[6,4],[1,2,7,1]]
T.e разбить массив , на подмассивы , чтобы сумма в подмассивах как можно ближе была равна 10 .
Если нужны мои потуги кода , я могу выложить , но пока своим умом дойти не могу.
Заранее, спасибо.

28.01.2022, 17:39
Регистрация: 27.05.2010
Сообщений: 33,072

надо искать тем с десяток наберётся.

28.01.2022, 23:45
Интересующийся
Регистрация: 28.01.2022
Сообщений: 16
Спасибо за ссылку , буду искать.
29.01.2022, 00:07
Регистрация: 27.05.2010
Сообщений: 33,072

аналогично что — то из разряда . слеплено из . )))

  

29.01.2022, 01:16
Интересующийся
Регистрация: 28.01.2022
Сообщений: 16
Еще раз спасибо , когда копирую Ваш код к себе в браузер , выдает кучу ошибок . Буду пробовать сам .
29.01.2022, 15:09
Интересующийся
Регистрация: 28.01.2022
Сообщений: 16

Ничего не получается , мож поможете составить цикл , только по одному моему массиву , а не по группе , как в предложенном ранее варианте.
Заранее спасибо.

P.S хоть и не получается , но плюсы небольшие есть. Перелопатил всю книгу. ))

Как разделить массив на куски в JavaScript

Как разделить массив на куски в JavaScript

Массивы – одна из самых часто используемых структур в JavaScript, поэтому важно знать её встроенные методы.

В этом уроке мы рассмотрим, как в JavaScript разделить массив на куски.

В частности, мы рассмотрим два подхода:

  1. Используя метод slice() и цикл for
  2. Используя метод splice() и цикл while

Делим массив с помощью метода slice()

Самый простой способ извлечь фрагмент массива или, скорее, разрезать его на части – это метод slice() :

slice(start, end) – выводит часть массива между индексами start и end .

Примечание: индексы могут быть отрицательными целыми числами. Это значит, что они перечисляются с конца массива. -1 – последний элемент массива, -2 – предпоследний и так далее…

Массив выводит копию, это значит, что любые ссылки в исходном массиве будут скопированы как ест, а значит нам не нужно выделять память для новых объектов.

Итак, чтобы разделить список или массив на ровные куски, используем метод slice() :

function sliceIntoChunks(arr, chunkSize) < const res = []; for (let i = 0; i < arr.length; i += chunkSize) < const chunk = arr.slice(i, i + chunkSize); res.push(chunk); >return res; > const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; console.log(sliceIntoChunks(arr, 3));

Результат будет следующим:

[[ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ], [ 10 ]]

В приведенном выше коде мы разбиваем arr на более мелкие фрагменты размером 3 , повторяя массив и разрезая его на части. На последней итерации останется только один элемент ( 10 ).

Делим массив с помощью метода splice()

Несмотря на то, что метод splice() может показаться похожим на метод slice() , они всё же различаются. Сейчас покажем:

myArray.splice(startIdx, deleteCount, newElem1, newElem2. ) let arrTest = [2, 3, 1, 4] let chunk = arrTest.splice(0,2) console.log(chunk) // [2, 3] console.log(arrTest) // [1, 4]
function spliceIntoChunks(arr, chunkSize) < const res = []; while (arr.length >0) < const chunk = arr.splice(0, chunkSize); res.push(chunk); >return res; > const arr = [1, 2, 3, 4, 5, 6, 7, 8]; console.log(spliceIntoChunks(arr, 2));
[ [ 1, 2 ], [ 3, 4 ], [ 5, 6 ], [ 7, 8 ] ]

Мы используем цикл while для обхода массива. На каждой итерации мы выполняем операцию сращивания и помещаем каждый фрагмент в результирующий массив до тех пор, пока в исходном массиве не останется больше элементов ( arr.length > 0 ).

Заметьте, что splice() изменяет исходный массив, а slice() создаёт копию исходного массива, поэтому исходный массив остаётся без изменений.

Заключение

В этой статье мы рассмотрели несколько простых способов, как в JavaScript разбить список на фрагменты. Также мы узнали, как работать с методами slice() и splice() .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *