Size: a a a

Хирьянов Т.Ф., Практика программирования на Python 3 (2019)

2020 May 18

Е

Евгений in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Переслано от Ivan Boyko
nmb_List = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 # последовательность чисел
flg_List = 0, 0, 1, 1, 1, 0, 0, 1, 0, 0 # значение да/нет для каждого числа

[[1, 2], [6, 7], [9, 10]], [[3, 4, 5], [8]] # то что хотелось бы получить

Друзья подскажите, как можено лаконично на python значение последовательности разбить по значениям да/нет.
источник

КК

Кирилл Картвелишвили... in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
оно разбивается так по группам, у которых нолики или единички подряд?
источник

КК

Кирилл Картвелишвили... in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
да, я понял. причём сначала нолики, а потом единички
источник

Е

Евгений in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Кирилл Картвелишвили
оно разбивается так по группам, у которых нолики или единички подряд?
ага, это уровень инсоляции, если часы с одним флагом идут подряд их нужно сгруппировать отдельно
источник

Е

Евгений in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
да, в выводе список[0] - темные часы, список[1] - светлые, при этом отдельные группы внутри
источник

КК

Кирилл Картвелишвили... in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
по-моему легче сначала сгруппировать флаги, а после уже соответствующие значения брать из часов
источник

Е

Евгений in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
это мой первый код за N-ное время, вот думаю что последняя проверка какая-то костылявая)
источник

Е

Евгений in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Дождёмся фидбека из продакшена :)
источник

КК

Кирилл Картвелишвили... in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
кажется есть идейка.
для начально делаем что-то такое:
negatives = [num for num, flag in zip(nums, flags) if not flag]
positives = [num for num, flag in zip(nums, flags) if flag]

после нужно делить их, когда встречаем, какую-то пропасть в элементах. то есть если следующий элемент исходного массива отличается больше чем на единичку - это место склейки. как организовать это деление, пока не придумал, но в процессе
источник

Е

Евгений in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Кирилл Картвелишвили
кажется есть идейка.
для начально делаем что-то такое:
negatives = [num for num, flag in zip(nums, flags) if not flag]
positives = [num for num, flag in zip(nums, flags) if flag]

после нужно делить их, когда встречаем, какую-то пропасть в элементах. то есть если следующий элемент исходного массива отличается больше чем на единичку - это место склейки. как организовать это деление, пока не придумал, но в процессе
да, была такая идея, но суть та же - придется пройтись с проверкой идущих подряд, хотелось как-то лаконично одним проходом
источник

КК

Кирилл Картвелишвили... in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
можно написать по быстрому функцию, которая будет возвращать список индексов, где есть эта склейка. после нужно выяснить нолик или единичка находится в первом элементе. а дальше получается легко, когда индексы есть
источник

КК

Кирилл Картвелишвили... in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Евгений
да, была такая идея, но суть та же - придется пройтись с проверкой идущих подряд, хотелось как-то лаконично одним проходом
можно попробовать ввести переменную, которая будет отвечать за нахождение момента смены флага. то есть мы бежим по списку изначально эта переменная равна первому флагу, и если она True, значит надо добавлять в список с единичками, а иначе с ноликами.
источник

КК

Кирилл Картвелишвили... in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
в итоге вроде за один проход
источник

Е

Евгений in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Кирилл Картвелишвили
можно попробовать ввести переменную, которая будет отвечать за нахождение момента смены флага. то есть мы бежим по списку изначально эта переменная равна первому флагу, и если она True, значит надо добавлять в список с единичками, а иначе с ноликами.
один-в-один идея из соседнего чата, да должно сработать, вопрос что мы выигрываем? - одной переменной меньше(в которой максимум 24 инта)
источник

Е

Евгений in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
тут, собственно и возник вопрос, а насколько это хорошо или плохо заводить лишнюю переменную на каждый чих(при условии что там мало объема данных)
источник

КК

Кирилл Картвелишвили... in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
не знаю. я просто думал над реализацией в один проход, а не о том, что мы выиграем
источник

Е

Евгений in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Кирилл Картвелишвили
не знаю. я просто думал над реализацией в один проход, а не о том, что мы выиграем
ну, кмк, меньше проходов == лучше
источник

КК

Кирилл Картвелишвили... in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Евгений
тут, собственно и возник вопрос, а насколько это хорошо или плохо заводить лишнюю переменную на каждый чих(при условии что там мало объема данных)
что лучше? с переменной в один цикл или без переменной, но в два цикла?
источник

Е

Евгений in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
Кирилл Картвелишвили
что лучше? с переменной в один цикл или без переменной, но в два цикла?
вопрос)
источник

КК

Кирилл Картвелишвили... in Хирьянов Т.Ф., Практика программирования на Python 3 (2019)
смотри, наглядный пример
источник