Форум сайта python.su
Не получается, как надо, выйти из вложенного цикла.
Есть ‘поле’ в виде вложенного списка. Нужно вывести первую попавшуюся координату элемента, где есть'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]
Отредактировано gnus (Янв. 22, 2017 06:20:08)
Офлайн
# 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))
Офлайн
Оказывается, просто сразу вывести значение. Снова все усложняю, туплю. Спасибо.
Офлайн
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
Офлайн
FishHook, вы меня раскусили, я недавно только с синтаксисом пайтона ознакомился.
Офлайн
Тебе нужно найти все координаты элементов “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) ])
Отредактировано Rodegast (Янв. 22, 2017 13:18:10)
Офлайн
Rodegast, только надо учитывать что в 3 версии его надо импортировать из модуля functools
Офлайн