Как указать номер элемента в матрице и номер итерации в Python?
Привет!! Помогите, пожалуйста, не знаю как реализовать в питоне.
Рассматриваю алгоритм Тёрнбулла, так вот при реализации возникла проблема.
Есть шаг алгоритма:
Здесь k — номер итерации, k>=0, N = 26, m = 21, j = 0..m
Известно значение, при этом р — векторстолбец
Так вот в чем вопрос: кааак в питоне указать и верхний, и нижний индексы??
Пробовала для нулевой итерации, получилось вот что, точнее не получилось
1 2 3 4 5 6 7
k = 0 summ = 0 sum1 = 0 for j in range(len(T)): for i in range(len(L)): for s in range(len(T)): sum1 = sum1 + w[i][s]*p[. ]
Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Найти в матрице 3 максимальных элемента, указать номер строки с минимальным элементом
Помогите решить для знаний
Найти в матрице 3 максимальных элемента. Указать номер строки с минимальным элементом
найти в матрице 3 максимальных элемента.Указать номер строки с min-ым элементом

Указатели: определить номер строки и номер столбца в матрице по адресу элемента
Как работая на указателях,передвигаясь по матрице определить номер строки и номер столбца по адресу.
В каждой строке матрицы найти максимум и его номер, затем номер элемента, который меньше (макс/2) и узнать его номер
Не можете подсказать, как все сделать в цикле Имеется матрицы, нужно в каждой строке найти.
Определить номер максимального элемента в каждой строке и номер минимального элемента в каждом столбце матрицы
Вывести на экран матрицу 4×8 , элементами которой являются целые случайные числа из интервала . .
Просто Лис
![]()
5321 / 3335 / 1021
Регистрация: 17.05.2012
Сообщений: 9,768
Записей в блоге: 9
![]()
5416 / 3840 / 1214
Регистрация: 28.10.2013
Сообщений: 9,554
Записей в блоге: 1
Сообщение от Frau_GM 
Здесь k — номер итерации
list_ = [1,3,5,7,9] for i,v in enumerate(list_)
в i будет номер итерации\индекса, в v — сам элемент списка.
Насчет нижних\верхних индексов непонятно. Минимальный\макcимальный индексы списка? 0..len(list1) -1 как в любом другом ЯП, где индексация начинается с нуля.
то есть for j in range(0,len(list_)) — 0 для старта указывать не обязательно, вычитать 1 не нужно, так как граница (stop) у range не включается в итерацию.
P.S. И матриц в стандартной библиотеке python нет. А обычные двумерные списки всякие хитрые матричные операции не поддерживают. Полноценные матрицы есть в numpy\scipy.
562 / 302 / 189
Регистрация: 20.05.2016
Сообщений: 592

Сообщение было отмечено Frau_GM как решение
Решение
Ежели k — номер итерации, никак указывать его не надо. Не обращайте на него внимание (он как бы указывает, что d и p вычисляются на каждом шаге итерации, в отличие от a). В коде его ипостасью будет самый верхний цикл, и скорее всего это будет while, а не for (вряд ли k ограничен конкретным числом). Словом, пишите просто p[s] , и внимательней с sum1 — её место внутри цикла.
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
В матрице найти элементы номер строки которых простое число, а номер столбца — нечетное
Необходимо создать двумерный массив a и еще привязать генератор случайных чисел Элемент называем.
В матрице размером m × n найти максимальное число и его координаты (номер строки и номер столбца)
Dim m As Integer Dim n As Integer Dim max As Integer Dim I As Integer Dim j As Integer Dim a().
Найти наибольший элемент данного массива и указать номер этого элемента.
Помогите пожалуйста бедной девушке,завтра экзамен,нужно будет сдать эти работы,иначе не сдам(кто.
Питонистический подход к циклам for: range() и enumerate()
Автор заметки, перевод которой мы сегодня публикуем, хочет рассказать о некоторых особенностях использования циклов for в Python.

Цикл for — это один из краеугольных камней программирования. С этими циклами будущие программисты знакомятся в самом начале учёбы и, после первого знакомства, пользуются ими постоянно.
Если вы занялись разработкой на Python, имея опыт работы с другим популярным языком программирования, вроде PHP или JavaScript, то вам знакома методика применения переменной-счётчика, хранящей, например, индекс текущего элемента массива, обрабатываемого в цикле. Вот пример работы с циклом, написанный на JavaScript:
let scores = [54,67,48,99,27]; for(const i=0; i < scores.length; i++) < console.log(i, scores[i]); >/* 0 54 1 67 2 48 3 99 4 27 */
Работая с циклами for очень важно понимать то, что эти циклы не перебирают массивы. Они лишь дают программисту механизм для работы с переменной-счётчиком, которая используется для обращения к элементам обрабатываемых массивов.
В предыдущем примере переменная i не имеет какого-то явного отношения к массиву scores . Она всего лишь хранит некое число, которое увеличивается на 1 в каждой итерации цикла, и которое, как оказывается, подходит для последовательного обращения к элементам массива по их индексам.
Старый (неудачный) способ работы с массивами
В Python нет традиционных циклов for , подобных тому, что показан выше. Правда, если вы похожи на меня, то первым вашим желанием при освоении Python станет поиск способа создания цикла, с которым вам привычно и удобно работать.
В результате вы можете обнаружить функцию range() и написать на Python нечто подобное следующему:
scores = [54,67,48,99,27] for i in range(len(scores)): print(i, scores[i]) """ 0 54 1 67 2 48 3 99 4 27 """
Проблема этого цикла заключается в том, что он не очень хорошо соответствует идеологии Python. В нём мы не перебираем список, а, вместо этого, используем вспомогательную переменную i для обращения к элементам списка.
На самом деле, даже в JavaScript существуют методы, позволяющие перебирать массивы, так сказать, без посредников. Речь идёт о циклах forEach и for of .
Использование функции enumerate()
Если вам нужно адекватным образом отслеживать «индекс элемента» в for -цикле Python, то для этого может подойти функция enumerate() , которая позволяет «пересчитать» итерируемый объект. Её можно использовать не только для обработки списков, но и для работы с другими типами данных — со строками, кортежами, словарями.
Эта функция принимает два аргумента: итерируемый объект и необязательное начальное значение счётчика.
Если начальное значение счётчика enumerate() не передаётся — оно, по умолчанию, устанавливается в 0 . Функция создаёт объект, генерирующий кортежи, состоящие из индекса элемента и самого этого элемента.
scores = [54,67,48,99,27] for i, score in enumerate(scores): print(i, score)
Такой код получился гораздо чище кода из предыдущего примера. Мы ушли от работы со списком индексов, мы перебираем сами значения, получая к ним прямой доступ в цикле for, и видим значения, с которыми работаем, в объявлении цикла.
Вот одна приятная возможность, которая понравится тем, кому нужно выводить нумерованные списки так, чтобы номер первого элемента был бы не 0 , в соответствии с его индексом, а 1 . Обычно для того, чтобы это сделать, приходится менять выводимый номер элемента. Например — так: i + 1 . При использовании же функции enumerate() достаточно передать ей, в качестве второго аргумента, то число, с которого нужно начинать нумерацию. В нашем случае — 1 :
scores = [54,67,48,99,27] for i, score in enumerate(scores, 1): print(i, score) """ 1 54 2 67 3 48 4 99 5 27 """
Итоги
Надеюсь, этот небольшой рассказ о циклах for в Python позволил вам узнать что-то новое об этом языке.
Уважаемые читатели! Знаете ли вы ещё какие-нибудь способы применения функции enumerate() ? Кажутся ли вам циклы, построенные с использованием enumerate() , более читабельными, чем циклы, созданные с использованием range(len()) ?
Python «for» циклы (определенная итерация)
Из этого туториала Вы узнаете, как выполнить определенную итерацию с помощью forцикла Python .
В предыдущем руководстве этой вводной серии вы узнали следующее:
Повторяющееся выполнение одного и того же блока кода снова и снова называется итерацией .
Есть два типа итераций:
Определенная итерация, в которой количество повторений указывается заранее явно
Бесконечная итерация, при которой блок кода выполняется до тех пор, пока не будет выполнено какое-либо условие.
В Python неопределенная итерация выполняется с помощью whileцикла.
Вот что вы расскажете в этом уроке:
Вы начнете со сравнения некоторых различных парадигм, используемых языками программирования для реализации определенной итерации.
Затем вы узнаете об итерациях и итераторах , двух концепциях, которые составляют основу определенной итерации в Python.
Наконец, вы свяжете все это вместе и узнаете о forциклах Python .
Обзор определенных итераций в программировании
Циклы с определенными итерациями часто называют forциклами, поскольку forэто ключевое слово используется для их представления почти во всех языках программирования, включая Python.
Исторически языки программирования предлагали несколько разновидностей forциклов. Они кратко описаны в следующих разделах.
Цикл числового диапазона
Самый простой forцикл — это простой оператор числового диапазона с начальным и конечным значениями. Точный формат зависит от языка, но обычно выглядит примерно так:
for i = 1 to 10
Здесь тело цикла выполняется десять раз. Переменная i принимает значение 1на первой итерации, 2на втором, и так далее. Этот вид forцикла используется в языках BASIC, Algol и Pascal.
Цикл с тремя выражениями
Другая форма forцикла, популярная в языке программирования C, состоит из трех частей:
Инициализация
Выражение, определяющее конечное условие
Действие, выполняемое в конце каждой итерации.
Этот тип цикла имеет следующий вид:
for (i = 1; iЭтот цикл интерпретируется следующим образом:
Инициализировать iв 1.
Продолжайте делать петли до тех пор, пока i Увеличение iна 1после каждой итерации цикла.
forЦиклы с тремя выражениями популярны, потому что выражения, указанные для трех частей, могут быть почти любыми, так что это дает немного больше гибкости, чем простая форма числового диапазона, показанная выше. Эти forциклы также представлены в языках C ++ , Java, PHP и Perl.Цикл на основе коллекции или итератора
Этот тип цикла выполняет итерацию по коллекции объектов, а не указывает числовые значения или условия:
for i inКаждый раз при прохождении цикла переменная iпринимает значение следующего объекта в . Этот тип forцикла, пожалуй, самый общий и абстрактный. Perl и PHP также поддерживают этот тип цикла, но он вводится ключевым словом foreachвместо for.
Python для цикла
Из перечисленных выше типов циклов Python реализует только последнюю итерацию на основе коллекции. На первый взгляд это может показаться грубым делом, но будьте уверены, что реализация определенной итерации в Python настолько универсальна, что вы не почувствуете себя обманутым!
Вскоре вы forподробно раскроете внутренности цикла Python . А пока начнем с быстрого прототипа и примера, просто для ознакомления.
forЦикл Python выглядит так:
for in :представляет собой набор объектов, например список или кортеж. В теле цикла обозначаются углублением, как и со всеми структурами управления Python и выполняются один раз для каждого элемента . Переменная цикла принимает значение следующего элемента при каждом прохождении цикла.
Вот типичный пример:
a = ['foo', 'bar', 'baz'] >>> for i in a: . print(i) . foo bar bazВ этом примере - это список a, а - переменная i. Каждый раз через петлю, iберет на последовательный элементе a, так что print()отображает значения 'foo', 'bar'и 'baz', соответственно. Такой forцикл - это питонический способ обработки элементов в итеративном режиме.
Но что такое итерация? Перед forдальнейшим изучением циклов будет полезно более глубоко изучить, что такое итерируемые объекты в Python.
Итерируемые объекты
В Python итерация означает, что объект можно использовать в итерации. Этот термин используется как:
Прилагательное: объект можно описать как повторяющийся.
Существительное: объект можно охарактеризовать как повторяющийся.
Если объект является итеративным, его можно передать встроенной функции Python iter(), которая возвращает нечто, называемое итератором . Да, терминология становится немного повторяющейся. Повесить там. В конце концов, все получается.Каждый из объектов в следующем примере является итерируемым и возвращает некоторый тип итератора при передаче в iter():
>>> iter('foobar') # String >>> iter(['foo', 'bar', 'baz']) # List >>> iter(('foo', 'bar', 'baz')) # Tuple >>> iter() # Set >>> iter() # DictС другой стороны, эти типы объектов не повторяются:
>>> iter(42) # Integer Traceback (most recent call last): File "", line 1, in iter(42) TypeError: 'int' object is not iterable >>> iter(3.1) # Float Traceback (most recent call last): File "", line 1, in iter(3.1) TypeError: 'float' object is not iterable >>> iter(len) # Built-in function Traceback (most recent call last): File "", line 1, in iter(len) TypeError: 'builtin_function_or_method' object is not iterableВсе типы данных, с которыми вы столкнулись до сих пор, которые являются типами коллекций или контейнеров, являются итеративными. К ним относятся типы string , list , tuple , dict , set и frozenset .
Но это ни в коем случае не единственные типы, которые можно перебирать. Многие объекты, встроенные в Python или определенные в модулях, предназначены для итерации. Например, открытые файлы в Python можно повторять. Как вы скоро увидите в учебнике по файловому вводу-выводу, итерация по открытому файловому объекту считывает данные из файла.
Фактически, почти любой объект в Python можно сделать повторяемым. Даже определенные пользователем объекты могут быть спроектированы таким образом, чтобы их можно было повторять. (Вы узнаете, как это делается, в следующей статье об объектно-ориентированном программировании.)
Итераторы
Хорошо, теперь вы знаете, что означает возможность итерации объекта, и знаете, как использовать его iter()для получения итератора. Что вы можете с ним делать, если у вас есть итератор?
Итератор - это, по сути, производитель значений, который выдает последовательные значения из связанного с ним итеративного объекта. Встроенная функция next()используется для получения следующего значения из итератора.
Вот пример с использованием того же списка, что и выше:
>>> a = ['foo', 'bar', 'baz'] >>> itr = iter(a) >>> itr >>> next(itr) 'foo' >>> next(itr) 'bar' >>> next(itr) 'baz'В этом примере a- это повторяемый список и itrсвязанный с ним итератор, полученный с помощью iter(). Каждый next(itr)вызов получает следующее значение из itr.
Обратите внимание, как итератор сохраняет внутреннее состояние. Он знает, какие значения уже были получены, поэтому, когда вы звоните next(), он знает, какое значение вернуть следующим.
Что происходит, когда в итераторе заканчиваются значения? Сделаем еще один next()вызов итератору выше:
>>> next(itr) Traceback (most recent call last): File "", line 1, in next(itr) StopIterationЕсли все значения от итератора уже были возвращены, последующий next()вызов вызывает StopIterationисключение. Любые дальнейшие попытки получить значения от итератора потерпят неудачу.
Вы можете получать значения от итератора только в одном направлении. Вы не можете вернуться назад. Нет prev()функции. Но вы можете определить два независимых итератора на одном итерируемом объекте:
>>> a ['foo', 'bar', 'baz'] >>> itr1 = iter(a) >>> itr2 = iter(a) >>> next(itr1) 'foo' >>> next(itr1) 'bar' >>> next(itr1) 'baz' >>> next(itr2) 'foo'Даже если итератор itr1уже находится в конце списка, itr2он все еще находится в начале. Каждый итератор поддерживает собственное внутреннее состояние, независимое от другого.
Если вы хотите получить сразу все значения из итератора, вы можете использовать встроенную list()функцию. Среди других возможных применений он list()принимает итератор в качестве аргумента и возвращает список, состоящий из всех значений, выданных итератором:
>>> a = ['foo', 'bar', 'baz'] >>> itr = iter(a) >>> list(itr) ['foo', 'bar', 'baz']Аналогичным образом , встроенные tuple()и set()функции возвращают кортеж и набор, соответственно, из всех значений AN урожайность итератора:
>>> a = ['foo', 'bar', 'baz'] >>> itr = iter(a) >>> tuple(itr) ('foo', 'bar', 'baz') >>> itr = iter(a) >>> set(itr)
Необязательно делать это привычкой. Отчасти элегантность итераторов заключается в том, что они «ленивы». Это означает, что когда вы создаете итератор, он не генерирует все элементы, которые он может дать в этот момент. Он ждет, пока вы их попросите next(). Элементы не создаются, пока они не будут запрошены.
Когда вы используете list(), tuple()или что-то подобное, вы заставляете итератор генерировать все свои значения сразу, чтобы их все можно было вернуть. Если общее количество объектов, возвращаемых итератором, очень велико, это может занять много времени.
Фактически, в Python можно создать итератор, который возвращает бесконечную серию объектов, используя функции генератора и itertools. Если вы попытаетесь получить сразу все значения из бесконечного итератора, программа зависнет .
Внутренности для петли Python
Теперь вы познакомились со всеми концепциями, необходимыми для полного понимания того, как работает forцикл Python . Прежде чем продолжить, давайте рассмотрим соответствующие термины:
Срок Смысл
Итерация Процесс перебора объектов или элементов в коллекции
Итерабельный Объект (или прилагательное, используемое для описания объекта), который можно повторять.
Итератор Объект, который производит последовательные элементы или значения из связанного с ним итеративного объекта.
iter() Встроенная функция, используемая для получения итератора из итерируемого
Теперь снова рассмотрим простой forцикл, представленный в начале этого урока:>>> a = ['foo', 'bar', 'baz'] >>> for i in a: . print(i) . foo bar bazИтерации по словарю
Ранее вы видели, что итератор можно получить из словаря с помощью iter(), поэтому вы знаете, что словари должны быть итеративными. Что происходит, когда вы просматриваете словарь? Посмотрим:
>>> d = >>> for k in d: . print(k) . foo bar bazКак видите, когда forцикл выполняет итерацию по словарю , переменная цикла присваивается ключам словаря.
Чтобы получить доступ к значениям словаря в цикле, вы можете сделать ссылку на словарь, используя ключ, как обычно:
>>> for k in d: . print(d[k]) . 1 2 3Вы также можете перебирать значения словаря напрямую, используя .values():
>>> for v in d.values(): . print(v) . 1 2 3Фактически, вы можете перебирать как ключи, так и значения словаря одновременно. Это потому, что переменная forцикла не ограничивается одной переменной. Это также может быть кортеж, и в этом случае присваивания выполняются из элементов в итерируемом объекте с использованием упаковки и распаковки, как и в случае с оператором присваивания:
>>> i, j = (1, 2) >>> print(i, j) 1 2 >>> for i, j in [(1, 2), (3, 4), (5, 6)]: . print(i, j) . 1 2 3 4 5 6Как отмечалось в руководстве по словарям Python , метод словаря .items()фактически возвращает список пар ключ / значение в виде кортежей:
>>> d = >>> d.items() dict_items([('foo', 1), ('bar', 2), ('baz', 3)])Таким образом, Python-способ перебора словаря с доступом как к ключам, так и к значениям выглядит так:
>>> d = >>> for k, v in d.items(): . print('k =', k, ', v =', v) . k = foo , v = 1 k = bar , v = 2 k = baz , v = 3range()Функция
В первом разделе этого руководства вы видели тип forцикла, называемый циклом числового диапазона , в котором указываются начальное и конечное числовые значения. Хотя эта форма forцикла не встроена непосредственно в Python, к ней легко добраться.
Например, если вы хотите перебрать значения от 0до 4, вы можете просто сделать это:
>>> for n in (0, 1, 2, 3, 4): . print(n) . 0 1 2 3 4Это решение не так уж и плохо, когда есть всего несколько цифр. Но если бы диапазон чисел был намного больше, это быстро стало бы утомительно.
К счастью, Python предоставляет лучший вариант - встроенную range()функцию, которая возвращает итерацию, которая дает последовательность целых чисел.
range()возвращает итерацию, которая возвращает целые числа, начиная с 0, но не включая :
>>> x = range(5) >>> x range(0, 5) >>> type(x)Обратите внимание, что range()возвращает объект класса range, а не список или кортеж значений. Поскольку rangeобъект является итерируемым, вы можете получить значения, перебирая их с помощью forцикла:
>>> for n in x: . print(n) . 0 1 2 3 4Вы также можете получить сразу все значения с помощью list()или tuple(). В сеансе REPL это может быть удобным способом быстро отобразить значения:
>>> list(x) [0, 1, 2, 3, 4] >>> tuple(x) (0, 1, 2, 3, 4)Однако, когда range()он используется в коде, который является частью более крупного приложения, это обычно считается плохой практикой для использования list()или tuple()таким образом. Подобно итераторам, rangeобъекты «ленивы» - значения в указанном диапазоне не генерируются, пока они не будут запрошены. Использование list()или tuple()на rangeобъекте приводит к одновременному возврату всех значений. Это редко бывает необходимо, и если список будет длинным, это может привести к потере времени и памяти.
range(, , )возвращает итерацию, которая возвращает целые числа, начиная с , до, но не включая . Если указано, указывает величину пропуска между значениями (аналогично значению шага, используемому для нарезки строк и списков):
>>> list(range(5, 20, 3)) [5, 8, 11, 14, 17]Если не указан, по умолчанию используется 1:
>>> list(range(5, 10, 1)) [5, 6, 7, 8, 9] >>> list(range(5, 10)) [5, 6, 7, 8, 9]Все указанные параметры range()должны быть целыми числами, но любой из них может быть отрицательным. Естественно, если больше , должно быть отрицательным (если вам нужны какие-либо результаты):
>>> list(range(-5, 5)) [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4] >>> list(range(5, -5)) [] >>> list(range(5, -5, -1)) [5, 4, 3, 2, 1, 0, -1, -2, -3, -4]Заключение
В этом руководстве представлен forцикл, рабочая лошадка определенной итерации в Python.
Вы также узнали о внутренней работе итерируемых и итераторов , два важных типов объектов, лежащих в основе определенной итерации, но и занимает видное место в широком спектре другого кода Python.
В следующих двух руководствах этой вводной серии вы немного переключитесь и исследуете, как программы Python могут взаимодействовать с пользователем посредством ввода с клавиатуры и вывода на консоль.
Использование индекса в цикле for в Python
Обычно, при использовании цикла for в Python, осуществляется обход элементов некоторого списка. Вот простейший пример:
numbers = [1, 2, 3, 4, 5] for number in numbers: print(number)В данном случае, на каждом шаге цикла переменная number принимает значение очередного элемента из списка numbers . Но что делать, если при этом необходимо знать индекс текущего элемента, то есть его порядковый номер в списке?
Для этого в Python предусмотрена функция enumerate() . Она принимает в качестве аргумента список (или любой другой итерируемый объект) и возвращает список кортежей, где первый элемент кортежа — это индекс, а второй — соответствующий элемент исходного списка.
Использование функции enumerate() в цикле for выглядит следующим образом:
numbers = [1, 2, 3, 4, 5] for i, number in enumerate(numbers, start=1): print("Элемент №<> = <>".format(i, number))В данном примере на каждом шаге цикла переменная i принимает значение индекса текущего элемента (начиная с 1, так как указан параметр start=1 ), а переменная number — значение самого элемента.
Таким образом, с помощью функции enumerate() довольно легко получить доступ к индексу элемента при итерации по списку в цикле for.
