Найти - Пользователи
Полная версия: Выйти из цикла
Начало » Python для новичков » Выйти из цикла
1
gnus
Не получается, как надо, выйти из вложенного цикла.
Есть ‘поле’ в виде вложенного списка. Нужно вывести первую попавшуюся координату элемента, где есть'I' и которой нет в другом списке.
[code bash]
['O', 'O', 'I', 'O', 'O', 'O', 'O', 'O', 'O', 'O']
['I', 'I', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O']
['O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O']
['O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O']
['O', 'O', 'O', 'O', 'O', 'O', 'I', 'O', 'I', 'I']
['O', 'O', 'O', 'O', 'O', 'I', 'O', 'I', 'O', 'O']
['O', 'O', 'O', 'O', 'O', 'I', 'O', 'I', 'O', 'O']
['I', 'I', 'I', 'O', 'O', 'O', 'I', 'O', 'O', 'O']
['O', 'O', 'I', 'O', 'O', 'O', 'O', 'O', 'O', 'O']
['O', 'O', 'I', 'O', 'O', 'O', 'O', 'O', 'O', 'I']
[/code]
[code python]
imun_kletki=[(0,2)] #координаты имунных клеток
# перебираем поле, находим перую попавшуюся имунную клетку
# и возвращаем ее координату
def seek_imun():
for x in range(n):
for y in range(m):
if field[x][y]=='I' and (x,y) not in imun_kletki:
koord=(x,y)
break
break
print(koord)
return koord
seek_imun()
[/code]
Т.е. в данном случае функция должна вывести (1,0), a получается (7,0)
wi34rd
 #
imun_kletki=[(0,2)]
def seek_imun(field):
    for x in range(len(field)):
        for y in range(len(field[x])):
            if field[x][y] == 'I' and (x, y) not in imun_kletki:
                return x, y
print(seek_imun(field))
gnus
Оказывается, просто сразу вывести значение. Снова все усложняю, туплю. Спасибо.
FishHook
wi34rd
ИМХО range(len(…)) - плохая практика, лично у меня такой код вызывает ощущение не вполне грамотного переноса с какого-то другого языка, как будто программист плохо владеет инструментарием питона и не парится по этому поводу, работает да и ладно. Скажите, вам разве вот такой подход не нравится больше?


 def seek_imun(field):
    for x, row in enumerate(field):
        for y, value in enumerate(row):
            if value == 'I' and (x, y) not in imun_kletki:
                return x, y
wi34rd
FishHook, вы меня раскусили, я недавно только с синтаксисом пайтона ознакомился.
Rodegast
Тебе нужно найти все координаты элементов “I”? Это можно сделать более функционально:
 kletki = [
	['O', 'O', 'I', 'O', 'O', 'O', 'O', 'O', 'O', 'O'],
	['I', 'I', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O'],
	['O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O'],
	['O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O'],
	['O', 'O', 'O', 'O', 'O', 'O', 'I', 'O', 'I', 'I'],
	['O', 'O', 'O', 'O', 'O', 'I', 'O', 'I', 'O', 'O'],
	['O', 'O', 'O', 'O', 'O', 'I', 'O', 'I', 'O', 'O'],
	['I', 'I', 'I', 'O', 'O', 'O', 'I', 'O', 'O', 'O'],
	['O', 'O', 'I', 'O', 'O', 'O', 'O', 'O', 'O', 'O'],
	['O', 'O', 'I', 'O', 'O', 'O', 'O', 'O', 'O', 'I']
]
imun_kletki = reduce(lambda x, y: x + y, [ [ (y, x) for (x, z) in enumerate(s) if z == "I" ] for (y, s) in enumerate(kletki) ])
heyyyy
Rodegast, только надо учитывать что в 3 версии его надо импортировать из модуля functools
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