Разбить массив на несколько массивов по условию [закрыт]
Учебные задания допустимы в качестве вопросов только при условии, что вы пытались решить их самостоятельно перед тем, как задать вопрос. Пожалуйста, отредактируйте вопрос и укажите, что именно вызвало у вас трудности при решении задачи. Например, приведите код, который вы написали, пытаясь решить задачу
Закрыт 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
- +1 ещё
Как отфильтровать текст Python?
- 1 подписчик
- 48 минут назад
- 36 просмотров
Как разбить массив на подмассивы используя «0» как разделитель?

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

Сергей П @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 комментария

В последнем решении есть небольшая опечатка, вот исправленный вариант:
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 Куратор тега 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)
Все эти методы позволяют разбить список на равные части, но выбор конкретного метода зависит от конкретной задачи и условий.