Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
1741 / 913 / 480
Регистрация: 05.12.2013
Сообщений: 3,074

Нечто непонятное со списками

26.01.2018, 03:17. Показов 1325. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Код почему-то странно работает

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
def merge(lst, res=[]):
  for el in lst:
    merge(el) if isinstance(el, list) else res.append(el)
  return res
 
 
def check_pattern(field):
    lst = merge(field)
    print(lst)
    if len(set(lst)) > 2:
        return False
    if len(lst) == 1:
        return False
 
    n, m = field[0][0], field[0][1]
    if n == m:
        return False
    check = []
    for i in range(len(field)):
        for j in range(len(field[0])):
            if (i + j) % 2 == 0:
                 check.append(field[i][j] == n)
            else:
                 check.append(field[i][j] == m)
    if len(set(check)) > 1:
        return False
    else:
        return True
 
 
 
fields = [[1, 0, 1, 0, 1],[0, 1, 0, 1, 0],[1, 0, 1, 0, 1]]
 
 
 
 
print(check_pattern([[1, 0, 1, 0],[0, 1, 0, 1]]) )
print(check_pattern([[1, 2, 3, 1],[2, 3, 1, 2],[3, 1, 2, 3]]))
 
print("----------------------------")
 
print(check_pattern(fields))
 
print(check_pattern([[2, 4, 2, 4, 2],[4, 2, 4, 2, 4],[2, 4, 2, 4, 2],[4, 2, 4, 2, 4],[2, 4, 2, 4, 2],[4, 2, 4, 2, 4],[2, 4, 2, 4, 2]]))
 
print(check_pattern([[0, 1, 0, 1, 1, 1 ]]))
на выходе

Python
1
2
3
4
5
6
7
8
9
10
11
[1, 0, 1, 0, 0, 1, 0, 1]
True
[1, 0, 1, 0, 0, 1, 0, 1, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3]
False
----------------------------
[1, 0, 1, 0, 0, 1, 0, 1, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1]
False
[1, 0, 1, 0, 0, 1, 0, 1, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2]
False
[1, 0, 1, 0, 0, 1, 0, 1, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 0, 1, 0, 1, 1, 1]
False
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.01.2018, 03:17
Ответы с готовыми решениями:

Нечто непонятное , лаги , ошибки , проблемы с загрузкой
Конкретной проблемы нет но попытаюсь объяснить настолько доступно чтобы хотя догадки какие-то возникли и предположения в чем проблема. ...

После покупки новой видео карты началось нечто непонятное)
Всем привет! Моя история такая) Купил себе новую видяху, тогда еще 760 gtx, и сразу же начала периодически зависать система (со старой...

Адское нечто
Доброго дня снова) В очередной раз нужна помощь мастеров-) На рабочем компе, побывавшем во множестве кривых рук, полная беда с рекламой в...

3
Фрилансер
 Аватар для Black Fregat
3709 / 2083 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
26.01.2018, 04:56
Лучший ответ Сообщение было отмечено ТабуретY как решение

Решение

Это забавная ошибка, про которую мне уже приходилось читать на просторах сети.
Смысл ошибки в том, что загололвок
Python
1
def merge(lst, res=[]):
работает не совсем так, как это интуитивно ожидается.
По каким-то причинам Питон не создаёт список заново каждый раз при вызове процедуры без параметра по умолчанию.
Он создаёт его один раз, а затем каждый раз подставляет уже существующий объект. Поэтому все манипуляции накапливаются..

Кстати, без этой особенности Ваш код вообще не работал бы, ибо подсписки объединялись бы "в никуда".

Я бы переписал merge примерно так:
Python
1
2
3
4
5
6
7
8
def merge(lst):
  res = [] 
  for el in lst:
    if isinstance(el, list):
      res.extend(merge(el))  
    else: 
      res.append(el)
  return res
1
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
26.01.2018, 11:37
Цитата Сообщение от Black Fregat Посмотреть сообщение
По каким-то причинам Питон не создаёт список заново каждый раз при вызове процедуры без параметра по умолчанию.
1) Инициализация аргументов по-умолчанию происходит 1 раз.
2) В python все объекты передаются по ссылке.
3) Список изменяемый объект
4) Лошади кушают овес и сено... :-)
0
Фрилансер
 Аватар для Black Fregat
3709 / 2083 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
26.01.2018, 22:20
Цитата Сообщение от Garry Galler Посмотреть сообщение
1) Инициализация аргументов по-умолчанию происходит 1 раз.
Собственно, я написал то же самое, нет?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.01.2018, 22:20
Помогаю со студенческими работами здесь

Нечто-Когнитрон
Добрый день! А пока ближе к теме моих интересов. Исходные предположения. 1. Любой алгоритм обучения, так или иначе, в той или...

Вычислить нечто ...
Не могу понять почему не работает type t_matr =array of integer; function f1(a: array of integer; x: integer): boolean; var i:...

Нечто с интернетом
чч, господа. Давно меня уже озадачивает данная тема... Вообщем, интернет постоянно прерывается в самом компьютере, ибо линия в порядке....

Нечто похожее на стену в вк
Ребят, не бросайте сильно помидоры! Может вы где-нибудь видели обучалку, книжку или статью, как реализовать что-то подобное как на стенке в...

Нечто непонятно с GPIO
Пытаясь управлять экранчиком аля Winstor WH0802A столкнулся с неожиданной проблемой,2 ноги из 7 к которым подключен дисплей просто не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru