Перейти к содержимому

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

  • автор:

Разбить массив на несколько массивов по условию [закрыт]

Учебные задания допустимы в качестве вопросов только при условии, что вы пытались решить их самостоятельно перед тем, как задать вопрос. Пожалуйста, отредактируйте вопрос и укажите, что именно вызвало у вас трудности при решении задачи. Например, приведите код, который вы написали, пытаясь решить задачу

Закрыт 11 месяцев назад .

Помогите, пожалуйста разбить массив на несколько по условию. Имеется примерно такой массив (из внешнего файла):

TIMESTEP: 1 ITEM: ATOMS x y z 1 2 3 1 2 3 2 2 3 TIMESTEP: 2 ITEM: ATOMS x y z 2 3 4 4 4 4 5 5 5 7 7 7 TIMESTEP: 3 ITEM: ATOMS x y z 2 3 4 4 4 4 5 5 5 3 2 1 1 1 1 1 1 1 6 6 6 

Пользователь вводит значение TIMESTEP в консоли, и выводится массив значений, соответствующий данному шагу. Количество элементов в пределах одного такого подмассива — разное. Я думала, что нужно как-то работать с повторяющимися строками ITEM: ATOMS x y z, но не могу сообразить как.

Отслеживать
Ксюша Иваничкина
задан 1 фев 2023 в 12:28
Ксюша Иваничкина Ксюша Иваничкина
3 2 2 бронзовых знака

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

def split_array(file_content, step): step_data = [] lines = file_content.split("\n") reading_data = False for line in lines: if "TIMESTEP: " + str(step) in line: reading_data = True elif "TIMESTEP: " in line: reading_data = False elif reading_data: step_data.append(line) return step_data file_content = "TIMESTEP: 1\nITEM: ATOMS x y z\n1 2 3\n1 2 3\n2 2 3\nTIMESTEP: 2\nITEM: ATOMS x y z\n2 3 4\n4 4 4 \n5 5 5\n7 7 7\nTIMESTEP: 3\nITEM: ATOMS x y z\n2 3 4\n4 4 4 \n5 5 5\n3 2 1 \n1 1 1\n1 1 1 \n6 6 6" step = int(input("Введите номер: ")) step_data = split_array(file_content, step) print("Данные для шага", step, ":") print("\n".join(step_data)) 

Отслеживать
ответ дан 1 фев 2023 в 13:04
1,078 10 10 серебряных знаков 27 27 бронзовых знаков

    Важное на Мете
Похожие

Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.1.3.2953

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Как одним выражением разбить массив на группы из n элементов в python?

У меня есть массив с неизвестным количеством элементов и я хочу получить из него массив массивов из 5 элементов, а остаток от деления на 5 убрать. Например:
[n0, n1, n2 . n17] -> [[n0, n1, n2, n3, n4], [n5-n9], [n10-n14]]
[n0, n1, n2, n3] -> []

Как это сделать при помощи одного выражения?

  • Вопрос задан более трёх лет назад
  • 14122 просмотра

Комментировать
Решения вопроса 2
software engineer

>>> items, chunk = range(1,20), 3 >>> zip(*[iter(items)]*chunk) [(1, 2, 3), (4, 5, 6), (7, 8, 9), (10, 11, 12), (13, 14, 15), (16, 17, 18)]

Ответ написан более трёх лет назад
Комментировать
Нравится 5 Комментировать
Ху Нью @stopbreath
начинающий/практикующий python-программист

In [9]: s = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] In [10]: [s[d:d+5] for d in xrange(0, len(s), 5)] Out[10]: [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14]]

Примерно так?
Ответ написан более трёх лет назад
Нравится 3 1 комментарий
Boldy @Boldy Автор вопроса

[s[d:d+5] for d in xrange(0, len(s), 5) if len(s[d:d+5]) == 5] (чтобы отбросить остаток)

Спасибо. То, что я искал.

Ответы на вопрос 0
Ваш ответ на вопрос

Войдите, чтобы написать ответ

python

  • Python
  • +1 ещё

Как отфильтровать текст Python?

  • 1 подписчик
  • 48 минут назад
  • 36 просмотров

Как разбить массив на подмассивы используя «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

Разбиение списка на равные части в Python

Часто в программировании возникает задача разбить список на равные части. Например, есть список из 10 элементов, и его нужно разбить на части по 2 элемента.

Алексей Кодов
Автор статьи
7 июля 2023 в 17:35

Часто в программировании возникает задача разбить список на равные части. Например, есть список из 10 элементов, и его нужно разбить на части по 2 элемента. В итоге должно получиться 5 подсписков по 2 элемента в каждом.

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

В Python для этого можно использовать различные подходы. Варианты реализации могут варьироваться в зависимости от конкретных требований и условий задачи. Представлены некоторые из них ниже.

Использование цикла for

Один из базовых способов — использование цикла for и встроенной функции range. Сначала задается размер частей, на которые будет разбиваться список, затем с помощью цикла формируются подсписки нужного размера.

chunk_size = 2 chunks = [numbers[i:i + chunk_size] for i in range(0, len(numbers), chunk_size)]

Использование генератора

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

def chunks(lst, chunk_size): for i in range(0, len(lst), chunk_size): yield lst[i:i + chunk_size] chunks_list = list(chunks(numbers, chunk_size))

Использование библиотеки Numpy

Если в проекте используется библиотека Numpy, то можно использовать функцию array_split, которая разбивает массив на подмассивы.

import numpy as np chunks = np.array_split(numbers, len(numbers) // chunk_size)

Все эти методы позволяют разбить список на равные части, но выбор конкретного метода зависит от конкретной задачи и условий.

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

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