Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.79/29: Рейтинг темы: голосов - 29, средняя оценка - 4.79
0 / 0 / 0
Регистрация: 07.03.2012
Сообщений: 17
1

Начать вложенный цикл не с первого элемента и по условию вернуться в основной цикл

04.08.2019, 17:31. Показов 5658. Ответов 12
Метки нет (Все метки)

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

Есть цикл, в котором идёт перебор массива. Внутри цикла есть условие, при котором идёт переход во вложенный цик, который перебираёт всё тот же массив, но который:
1) необходимо начать со следующего индекса, при котором сработало условие
2) сравнивать текущее и значение элемента массива, при котором был вход
3) при срабатывании условия внутри вложенного цикла вернуться в первый цикл на индекс, при котором сработало условие во вложенном цикле

Схематично это выглядит так:
a = [8,56,346,246,68,1,4365,864,97,447]

перебор массива a
если a[i] > 100
продолжение перебора массива, но не первого значения, а со следующего и с сохранением значения индекса i (в js я бы сделал так: for (k = i+1; k <= k.length ; k++)
если a[i] < a[k]
вернуться в первый цикл на позицию k



Как продолжить с определенного индекса я вроде как понял, но дальше ступор.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.08.2019, 17:31
Ответы с готовыми решениями:

Как переделать данный цикл for во вложенный цикл foreach?
Добрый день, как переделать данный цикл во вложенный цикл foreach? for (i in 0 until...

Цикл for вложенный в другой цикл for
Не могу разобраться с механизмом работы цикла вложенного в другой цикл. Конечный результат 499500....

foreach. Возможно ли начать цикл с ненулевого элемента?
Можно ли в foreach начать цикл не с нулегого, а скажем с первого элемента? for (int i = 1; i &lt;...

Создать программу по всем 3 видам циклов...цикл с параметром,цикл с условием,цикл,и цикл с предусловием...
Найти сумму чисел 1 в квадрате до 10 c квадрате...операцию возведению в степень не использовать...

12
Автоматизируй это!
Эксперт Python
4868 / 3373 / 969
Регистрация: 30.03.2015
Сообщений: 10,452
Записей в блоге: 28
04.08.2019, 18:24 2
unusually, может так
Python
1
2
3
4
5
6
7
8
9
a_list = [8, 56, 346, 246, 68, 1, 4365, 864, 97, 447]
 
for ind, el in enumerate(a_list):
    print(f'Индекс внешнего цикла {ind}, элемент {el}')
    if el > 100:
        for index, element in enumerate(a_list[ind + 1:], ind + 1):
            print(f'Индекс внутреннего цикла {index}, элемент {element}')
            if el < element:
                break
1
Эксперт Python
4534 / 1961 / 352
Регистрация: 17.03.2012
Сообщений: 9,874
Записей в блоге: 5
05.08.2019, 12:27 3
unusually, а, собственно, в чём проблема?
Два вложенных цикла по одному массиву независимы.
0
0 / 0 / 0
Регистрация: 07.03.2012
Сообщений: 17
06.08.2019, 19:39  [ТС] 4
Welemir1 , спасибо. Кажется то, что нужно.
А как сделать, чтобы после выполнения последнего условия
el < element:

возращалось бы на первый for, но цикл продолжался бы с позиции index.

Наверянка тоже решение на поверхности, но пока ничего не получается.
0
Автоматизируй это!
Эксперт Python
4868 / 3373 / 969
Регистрация: 30.03.2015
Сообщений: 10,452
Записей в блоге: 28
06.08.2019, 19:43 5
unusually, так, давай по-другому. Расскажи что тебе нужно. Не как ты хочешь это сделать (все эти выходы на индекс), а что ты хочешь сдлеать. В чем цель?
0
Эксперт Python
5086 / 3619 / 1147
Регистрация: 28.10.2013
Сообщений: 9,131
Записей в блоге: 1
06.08.2019, 19:47 6
Цитата Сообщение от unusually Посмотреть сообщение
Наверянка тоже решение на поверхности
(Если не вдаваться зачем вам все это нужно) просто переделайте свое решение на js на два while True\while условие со счетчиками. Питоновский for вам не подойдет.
0
0 / 0 / 0
Регистрация: 07.03.2012
Сообщений: 17
06.08.2019, 20:35  [ТС] 7
Welemir1 ,
в двух словах:
есть много больших массивов по несколько сотен тысяч/миллионов элементов "дата":"значение".
Мне нужно найти первый элемент, значение которого бы удовлетворяло условию и ближайшие следующий, значение которого также бы удовлетворяло условию (а-ля как из примера: el > 100 И el < element).
Эти периоды должны быть уникальны, то есть чтобы даты в них не пересекались. Поэтому мне и нужно вернуться в первый массив на конкретный индекс.
0
Автоматизируй это!
Эксперт Python
4868 / 3373 / 969
Регистрация: 30.03.2015
Сообщений: 10,452
Записей в блоге: 28
06.08.2019, 20:40 8
Цитата Сообщение от unusually Посмотреть сообщение
есть много больших массивов по несколько сотен тысяч/миллионов элементов "дата":"значение".
словарей может?
в остальном не очень понял, можешь пример привести нескольких коротких словарей и что надо найти с какими условиями?
0
Garry Galler
06.08.2019, 20:52
  #9

Не по теме:

Цитата Сообщение от Welemir1 Посмотреть сообщение
и что надо найти с какими условиями?
ТС пришел из html-ля...такшта мат. обоснований и какой-то особой логики ожидать не стоит... Иначе ТС бы знал, что миллион значений это прямая дорога в numpy.

0
0 / 0 / 0
Регистрация: 07.03.2012
Сообщений: 17
06.08.2019, 21:24  [ТС] 10
Цитата Сообщение от Welemir1 Посмотреть сообщение
словарей может?
в остальном не очень понял, можешь пример привести нескольких коротких словарей и что надо найти с какими условиями?
Добавил во вложение файл. В данном случае дата в файле не так важна.
Как пример:
есть две переменные: x - начальное значение; z - на сколько больше значения x должно быть для выполненения условия. Допустим x = 200000; z = 100000

Соответственно, нужно найти ближайшее значение, которое будет больше x, а для него ближайшее значение, которое будет больше найденного на z

Если брать пример, то это будет первый элемент с 595510 и ближайший следующий, который больше него на 100000 ( а именно 2952590)
Далее мы от элемента со значнием 2952590 ищём следующий, который > x. От него ищем ближайший следующий, который больше найденного на z

Цитата Сообщение от Garry Galler Посмотреть сообщение
ТС пришел из html-ля...такшта мат. обоснований и какой-то особой логики ожидать не стоит... Иначе ТС бы знал, что миллион значений это прямая дорога в numpy.
Я очень рад, что вы знаете python, numpy, судя по предудыщему сообщению ещё и js. И, вероятно, ещё и астрофизику, нейробиологию, умеете разговаривать на 18 языках и можете перемножать в уме девятизначные числа.
К сожалению, другие люди не такие способные. Особенно, когда они знакомы с чем-то новым только третий день.
0
0 / 0 / 0
Регистрация: 07.03.2012
Сообщений: 17
06.08.2019, 21:27  [ТС] 11
Файл не прикрепился
0
Вложения
Тип файла: 7z file2.7z (10.7 Кб, 3 просмотров)
Эксперт Python
5086 / 3619 / 1147
Регистрация: 28.10.2013
Сообщений: 9,131
Записей в блоге: 1
06.08.2019, 22:59 12
Цитата Сообщение от unusually Посмотреть сообщение
Особенно, когда они знакомы с чем-то новым только третий день.
ОК. Поэтому я вам и написал, что питоновский цикл for вам не подойдет, потому что переменная счетчика здесь никак не регулируется во время цикла. Она всегда принимает последовательные значения. Остается только старый добрый while c ручным счетчиком, который можно крутить туда-сюда. Но цикл while в Python медленный и поэтому для реальных вычислительных задач не используется. Что остается? Например, юзать нормальные математические библиотеки, которые предоставляют быстрые массивы а-ля С и кучу векторных операций для которых цикл вообще не нужен. Но поскольку вашу (сверх)задачу я не понял - код вам предоставить, увы, не могу.

P.S. Может быть, все-таки расскажите что это цифры и почему их нужно обрабатывать именно так, а не иначе? Потому какого-то смысла во всем этом я не увидел.
Ну находим мы элементы по условию: что дальше то с ними делаем, кроме того, что "магически" прыгаем туда-сюда?
Может просто изначально отсортировать основный массив по какому-то критерию? Что извлечь то нужно?
И, если, вы все-таки не в курсе - циклами с такими условиями по миллиону субсписков в которых еще и не инты, а строки, вы запаритесь обрабатывать данные.
0
2780 / 2052 / 805
Регистрация: 21.03.2016
Сообщений: 5,221
07.08.2019, 10:56 13
unusually, не совсем понял условие. я так понимаю первый цикл должен начаться с того индекса который во втором цикле был при выполнения условия. может это вас натолкнет на мысль
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
a = [8,56,346,246,68,1,4365,864,97,447]
 
index = []
start = 0
end = len(a)
 
while start < end: # цикл от начала индексов списка
    el = a[start]
    if el >100: # условие перехода в второй цикл
        index.append(start) # сохраняем индекс
        for k in range(start+1,end): # цикл со следущего индекса  при котором сработало условие
            if a[k]%3 == 0:
                print(a[k])
                start = k # изменяем индекс для первого цикла ( перескакиваем несколько шагов)
                break
    start += 1
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.08.2019, 10:56

Цикл: Определить количество элементов, значения которых больше первого элемента
Задан массив, состоящий из 15 элементов вещественного типа. Определить количество элементов,...

Выяснить почему после ввода первого элемента массива цикл не работает (std::cin в цикле for)
Добрый день! Взялся за простой пример из книги Лафоре. #include &lt;iostream&gt; #include...

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

Вложенный цикл FOR
Подскажите, пожалуйста, что нужно сделать! Выведите числовой квадрат заданного размера....

Вложенный цикл
Нужно написать программу по вложенному циклу. Задание я прилепил. Помогите кто знает!

Вложенный цикл
Помогите пожалуйста решить задачку на С++. Вот собственно и она:...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.