Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 12.10.2017
Сообщений: 13

Генератор потока для итерируемого объекта

28.06.2020, 12:30. Показов 906. Ответов 5

Студворк — интернет-сервис помощи студентам
Нужно написать функцию, которая будет создавать генератор потока для данного итерируемого объекта (список, генератор и т. Д.), Его элементы содержат позицию и значение и отсортированы по порядку появления. Генератор потока должен быть = исходному потоку, но пробелы заполнены нулями. Вот пример:
>>> gen = gen_stream (9, [(4,111), (7,12)])
>>> list (gen) [0, 0, 0, 0, 111, 0, 0, 12, 0] # первый элемент имеет 0й индекс, поэтому 111 находится на 5й позиции, 12 - на 8-й.
Т.е. 2 значащих эл-та имеют индексы 4 и 7, а все остальные эл-ты заполнены нулями.
Для упрощения сортировки элементов (т. Е. Элемент с более низкой позицией должен предшествовать элементу с более высоким номером) в исходном потоке.

Первый параметр может быть None, в этом случае поток должен быть бесконечным, например, поток с бесконечными нулями:
>>> gen_stream (нет, [])
следующий поток начинается с 0, 0, 0, 0, 111, 0, 0, 12, ... затем бесконечно генерирует нули:
>>> gen_stream (нет, [(4,111), (7,12)])

Функция также должна поддерживать пользовательский экстрактор значения позиции для более сложных случаев, например
>>>
def day_extractor (x):
месяцев = [31,28,31,30,31,31,30,31,30,31,30,31]
acc = сумма (месяцы [: x [1] -1]) + x [0] - 1
возврат (соотв. х [2])
>>> осадков_дней = [(3,1,4), (5,2,6)]
>>> список (gen_stream (59, осадков, дней, дней_экстрактора)) # 59: январь и февраль для ограничения выхода
[0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 0, 0]
Формат осадков_дней такой: (д, м, мм), где д - день в месяце, м - месяц, мм - количество осадков в миллиметрах
Итак, в примере:
(3,1,4) - 3 января, количество осадков: 4 мм
(5,2,6) - 5 февраля осадки: 6 мм
Экстрактор передается как необязательный третий параметр со значением по умолчанию - лямбда-функцией, которая обрабатывает пары (позиция, значение), как в первом примере.

Пока что дошёл до потока с бесконечными нулями, но функция не выполняется почему-то... И как сделать дальше с месяцами?
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import itertools
a=[(4,111),(7,12)]
n = 9
def gen_stream(n1, a1):
  if n1==None:
    b = [0 for i in itertools.count()]
  else:
    b = [0 for i in range(n1)]
  for i in range(len(a1)):
      b[a[i][0]]=a[i][1]
  for i in range(len(b)):
    yield b[i]
for i in gen_stream(None, a):
    print(i)
Добавлено через 10 минут
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import sys
a=[(4,111),(7,12)]
n = 9
def gen_stream(n1, a1):
  if n1==None:
    b = [0 for i in range(sys.maxsize)]
  else:
    b = [0 for i in range(n1)]
  for i in range(len(a1)):
      b[a[i][0]]=a[i][1]
  for i in range(len(b)):
    yield b[i]
for i in gen_stream(None, a):
    print(i)
Вот ещё с нулями попробовал сделать, но у меня вылетает ошибка памяти, и прога жрёт много оперативы((( помогите пожалуйста

Добавлено через 4 минуты
Просто ошибку памяти выдаёт...
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.06.2020, 12:30
Ответы с готовыми решениями:

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

Передача объекта из потока
Задача получить из потока объект, который создан в потоке Как решить эту задачу есть форма на ней размешено Edit, Memo, Button ...

Модификация объекта по ссылке из потока
В общем, ситуация такая: есть ассоциативный массив, который может содержать миллион записей. И есть класс, который будет работать с ним -...

5
Эксперт Python
 Аватар для unfindable_404
693 / 471 / 204
Регистрация: 22.03.2020
Сообщений: 1,051
28.06.2020, 14:43
Цитата Сообщение от Дима231 Посмотреть сообщение
но у меня вылетает ошибка памяти
В том то и смысл генераторов, что они не должны хранить в памяти все элементы. Генератор должен уметь вычислить следующий элемент последовательности и сразу забыть про предыдущий. А вы там создаёте список. Так если есть список, то генератор уже не нужен.
0
0 / 0 / 0
Регистрация: 12.10.2017
Сообщений: 13
28.06.2020, 15:49  [ТС]
функцию, которая будет создавать генератор потока для данного итерируемого объекта (списокunfindable_404, unfindable_404,
функцию, которая будет создавать генератор потока для данного итерируемого объекта (список.
Генератор потока должен быть равен исходному потоку
на входе список
на выходе список
Я так понял...
0
Эксперт Python
 Аватар для unfindable_404
693 / 471 / 204
Регистрация: 22.03.2020
Сообщений: 1,051
28.06.2020, 15:53
Цитата Сообщение от Дима231 Посмотреть сообщение
Генератор потока должен быть равен исходному потоку
на входе список
на выходе список
И как вы в таком случае планируете создать бесконечный список?
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,667
Записей в блоге: 29
28.06.2020, 17:03
Цитата Сообщение от unfindable_404 Посмотреть сообщение
И как вы в таком случае планируете создать бесконечный список?
естественно заняв бесконечный объем памяти, сударь-с!
1
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
28.06.2020, 19:50
https://www.cyberforum.ru/pyth... st14688724

Добавлено через 6 минут
По ссылке добавлен код.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.06.2020, 19:50
Помогаю со студенческими работами здесь

чтение объекта апплетами из потока
Здравствуйте! У меня такая проблема: существуют сервлет и два апплета. Сервлет читает из базы и передает информацию в поток в виде объекта....

Использование объекта из другого потока
Приветствую, граждане. Не являюсь программистом и не собираюсь им становиться. Лишь ИЗРЕДКА что-то пишу для собственных бытовых нужд....

Освобождение памяти объекта потока
Приветствую всех. Подскажите, правильно ли я понимаю, что если создать поток (TThread) и установить его свойство FreeOnTerminated = true,...

Создание объекта класса из потока
Всем привет. Пишу простенькую игрушку, понадобилось для нее подобие движка(сразу оговорюсь: для рендеринга используется OpenGL, игра...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru