Форум сайта python.su
В ходе решения задачи (https://py.checkio.org/mission/the-square-chest/) я написал вот этот код:
def checkio(lines_list): square_list = [] temp_lines_list = [0] * 4 for line_1 in lines_list: temp_lines_list[0] = line_1 for line_2 in lines_list: if line_2 in temp_lines_list[:1]: continue if (line_1[1] not in line_2) and (line_1[0] not in line_2): continue temp_lines_list[1] = line_2 for line_3 in lines_list: if line_3 in temp_lines_list[:2]: continue if (line_2[1] not in line_3) and (line_2[0] not in line_3): continue temp_lines_list[2] = line_3 for line_4 in lines_list: if line_4 in temp_lines_list[:3]: continue if (line_3[1] not in line_4) and (line_3[0] not in line_4): continue if (line_1[0] not in line_4) and (line_1[1] not in line_4): continue temp_lines_list[3] = line_4 #print(temp_lines_list) temp_lines_list.sort() #print(temp_lines_list) #print(square_list) #print(temp_lines_list in square_list) if temp_lines_list not in square_list: square_list.append(temp_lines_list) print('square_list = ', square_list) return(len(square_list)) res = checkio([[1, 2], [3, 4], [1, 5], [2, 6], [4, 8], [5, 6], [6, 7], [7, 8], [6, 10], [7, 11], [8, 12], [10, 11], [10, 14], [12, 16], [14, 15], [15, 16]]) print(res)
Отредактировано Mr.Geekman (Дек. 25, 2016 11:35:26)
Офлайн
У вас список temp_lines_list объявлен раньше цикла, поэтому нет никакого смысла добавлять его в другой список в цикле - вы каждый раз добавляете одно и то же. Объекты в питоне всегда присваиваются и передаются по ссылке.
Вот смотрите
s = [] s1 = [0] * 5 s.append(s1) s1[0] = "abc" s.append(s1) s1[1] = "AAA" s.append(s1) print(s)
Отредактировано FishHook (Дек. 24, 2016 19:16:20)
Офлайн
Подскажите, пожалуйста возможные варианты изменения кода для подобных случаев. Я вот например попробовал не создавать список с уже имеющимися в обращении связями, а непосредственно сравнивать новые связи с уже имеющимися.
for line_1 in lines_list: for line_2 in lines_list: if line_2 == line_1: continue if (line_1[1] not in line_2) and (line_1[0] not in line_2): continue for line_3 in lines_list: if line_3 == line_2 or line_3 == line_1: continue if (line_2[1] not in line_3) and (line_2[0] not in line_3): continue for line_4 in lines_list: if line_4 == line_3 or line_4 == line_2 or line_4 == line_1: continue if (line_3[1] not in line_4) and (line_3[0] not in line_4): continue if (line_1[0] not in line_4) and (line_1[1] not in line_4): continue temp_lines_list = [line_1, line_2, line_3, line_4] temp_lines_list.sort() if temp_lines_list not in square_list: square_list.append(temp_lines_list)
Отредактировано Mr.Geekman (Дек. 24, 2016 23:17:03)
Офлайн
Mr.Geekman
Для начала дайте в нормальном виде задание, по вашей ссылке 404.
Офлайн
Странно, я дал правильную ссылку, но она ведет на 404. Чтобы попасть на страницу с заданием я попробовал просто скопировать ссылку в адресную строку.
Офлайн
Да плевать куда она ведет, вы сюда в виде текста задание предоставьте. Не надо ссылок.
Офлайн
Mr.GeekmanВ адресную строку смотри, скобка прилипла
Странно, я дал правильную ссылку, но она ведет на 404.
Офлайн