Найти - Пользователи
Полная версия: Вопрос о грамотности
Начало » Python для новичков » Вопрос о грамотности
1 2 3
T0M
Задача состоит в том, чтобы определить расположение (индексы в массиве) нужного нам значения в двумерном массиве.
Я решил задачу банально через 2 цикла, пробегаясь по элементам:
#! -*- coding: utf-8 -*-

arr = [, , ]

i = False

for x in xrange(3):
for y in xrange(3):
if arr == 6:
print x, y
i = True
break
if i: break
Проблема в том, что при нахождении нужного нам элемента (значение 6) необходимо завершить оба цикла, для этого была введена переменная i.
Но это быдлокод, т.к. при массиве, скажем, 100к элементов, постоянно проверять переменную i на истину очень накладно.

Вопрос: каким образом можно грамотно выйти из обоих циклов?
o7412369815963
вызвать exception
T0M
например? притягивать сюда своё исключение за уши?
bw
Я поступаю так, но не очень мне этот способ по душе:
for x in range(3):
for y in range(3):
if arr[x][y] == 6:
print x, y
break
else:
continue
break
p.s. В данном примере xrange будет несколько расточительнее. Когда-то проверял, тестил, сейчас может это и не так.

..bw
T0M
bw, спасибо, невнимательно читаю книги
o7412369815963
T0M
например? притягивать сюда своё исключение за уши?
# coding: utf8

arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

try:
for x in range(3):
for y in range(3):
if arr[x][y] == 6:
raise Exception( (x,y) )
except Exception as e:
print e
таким способом можно не только выход из 2-х цыклов сделать но и из 100 и из функции…
o7412369815963
кстате можно в функцию завернуть и вызывать return
Андрей Светлов
может, тогда уж проще и естественней использовать банальный return?
T0M
Сразу же следущий подобный вопрос. Каким образом можно преобразовать двумерный массив к одномерому?
Мой вариант опять же сводится к быдлокоду, т.к. производится операция наполнения
a = [, , ]

out =
for x in xrange(3):
for y in xrange(3):
out.append(a)
o7412369815963, спасибо

Андрей Светлов, сразу за этими двумя циклами идут ещё 3-4 подобных, поэтому return непримени, я уже думал об этом)
o7412369815963
arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

for a in arr:
for b in a:
print b
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB