LINUX.ORG.RU

сравнение, «==»

 


0

1
        for max_list in max_list_from_all_plates:
            for high_indexes in max_list:
                print([row[2] for row in high_indexes])
   
                i = 0
                i += 1
                for i in range(len(high_indexes)):
                    print("index", i)


                    print("high_indexes", high_indexes[i][2])
                    if high_indexes[i][2] == high_indexes[i+1][2]: # ошибка тут
                        print("equal")
                    else:
                        print("not equal")

output

['8', 'F', 'P', 'R']
index 0
high_indexes 8
index 1
high_indexes F
index 2
high_indexes P
index 3
high_indexes R
['4', '6', 'K']
index 0
high_indexes 4
index 1
high_indexes 6
index 2
high_indexes K

Не могу сравнить символы, думаю что проблема с итерацией символов

Перемещено xaizek из general



Последнее исправление: leave (всего исправлений: 3)

Ее же банили. Откуда опять.

anonymous
()

Это что за язык такой? Питухон?

anonymous
()

Еще немного, и этот бот напишет что-нибудь работающее. Фрагмент про i=0 и дальше мне очень понравился.

anonymous
()

ошибка тут

Какая ошибка?

gruy ★★★★★
()
Ответ на: комментарий от anonymous

Реально такое ощущение, что это нейросеть обучается.

Ей в прошлый раз насували полные карманы огурцов про этот фрагмент, она его в другое место переставила. Еще 10-20 итераций, и получится рабочий вариант.

wandrien ★★
()
Ответ на: комментарий от wandrien

Это не нейросеть, нейросеть ведь способна к обучению, это человек просто «такой».

fernandos ★★★
()
Последнее исправление: fernandos (всего исправлений: 1)

Мой тебе совет: поставь pycharm community и изучи его как следует, а именно Debugger и как им пользоваться и дебажь итерационно свои циклы, ставь там брейк поинты (точки останова) на непонятный код и запускай дебаг, в дебаге все твои непонятки исчезнут. Тока иди ставь сразу, и не тяни с изучением дебаг процесса

menangen ★★★★★
()

Дай входные данные и описание задачи, тогда можно будет описать правильное решение.

Думай над каждой строчкой, выполняй код в голове, пользуйся дебаггером. Есть простой редактор - Thonny, специально для начинающих: он русифицирован и в нём есть полезные инструменты на вкладке «Вид». Также посети сайт с уроками и выучи основы, это совсем не сложно: https://pythonworld.ru/

У тебя i выходил за пределы массива на последней итерации. Пофикшенный код:

for max_list in max_list_from_all_plates:
    for high_indexes in max_list:
        print([row[2] for row in high_indexes])
        # i не надо объявлять заранее, уже объявлено в цикле
        # значение будет корректно:
        # 1) это локальная переменная
        # 2) итерация происходит от первого до последнего элемента
        for i in range(len(high_indexes)):
            print("index", i)
            print("high_indexes", high_indexes[i][2])
            if i + 1 == len(high_indexes):
                # теперь i+1 не выходит за пределы длинны массива
                break
            if high_indexes[i][2] == high_indexes[i+1][2]: # ошибка тут (была)
                print("equal")
            else:
                print("not equal")

Но задачу всё равно опиши, тут явно какая-то хрень происходит.

InterVi ★★★★
()
Ответ на: комментарий от menangen

Для новичка сложновато будет. Лучше Thonny или VSCode, но последний настраивать надо (как минимум линтер).

InterVi ★★★★
()
Ответ на: комментарий от InterVi

Наоборот, новичкам нужно приучаться к нормальной IDE и как пишут код, а не страдать и мучаться. Потом девочки не могут разобраться нифига как же дебажить код, и даже не знают что это такое

menangen ★★★★★
()
Ответ на: комментарий от menangen

Ну в Thonny это легко делается. Просто она совсем зелёная, а там всё страшное и на английском. А так да, в любом случае переходить на PyCharm. Есть видео уроки для начинающих:

Первое, что нашёл, в ютубе такого много. По настройке PyCharm есть ещё несколько частей. Если хочется учиться, с материалами проблем не возникнет.

Мне вот не нравится, что сразу травля началась.

InterVi ★★★★
()
Ответ на: комментарий от InterVi

if i + 1 …

Что тебе мешало отнять от len и не заниматься проверкой в каждой итерации?

Травля началась

Приведён бессмысленный кусок кода и несоответсвующий этому коду выхлоп. Утверждается, что наличествует ошибка.

Догадайся кого тут травят.

frob ★★★★★
()
Ответ на: комментарий от frob

Что тебе мешало отнять от len и не заниматься проверкой в каждой итерации?

а это хорошая идея, не додумался

InterVi ★★★★
()

21 хромосома 3 раза встречается, вместо двух. Потому и так тяжело. Заканчивай мучать себя питоном, найди менее трудное занятие.

anonymous
()

ошибка тут

Поздравляю.

А вопрос в чём?

WitcherGeralt ★★
()
Ответ на: комментарий от InterVi

спасибо за Вашу помощь, на счёт моей задачи сейчас: Есть список списков (max_list_from_all_plates то есть max_list_from_all_plates = [max_list] [max_list] [max_list] [max_list] ) в то же время в max_list входят множества елементов: max_list = [[high_indexes] [high_indexes] [high_indexes]]

итог [[max_list1 =[high_indexes][high_indexes][high_indexes]], [max_list2 =[high_indexes][high_indexes][high_indexes]]] и я хочу сравнить high_indexes с max_list1 с high_indexes с max_list2. не целый high_indexes а елемент [2] например

high_indexes[2] с max_list1   ['7', 'I', 'J', 'V', 'X']
['3', 'J', 'V', 'X']
['7', 'Z']
['0', '8', 'G', 'S']
['6', '8', 'G', 'S']
['F', 'R']
['4', '6', 'K', 'M']
high_indexes[2] c max_list2 ['7', 'A', 'I', 'J', 'V']
['7', '9', 'A', 'I', 'J', 'V', 'X']
['7', 'P', 'Z']
['6', '8', 'G', 'S']
['6', '8', 'G', 'S']
['F', 'P', 'R']
['4', '6', 'K']

и с первого елемента сразу можно сказать что ‘7’, ‘I’, ‘J’, ‘V’, повторяються а ‘X’ и ’А’нет. у каждого и этих елементов под индексом 0 есть значение float. которое я хочу потом сумировать sum. В вашем коде все значения оказались не равны потому сравнивают другие значения index 0

high_indexxes 7
not eqaul
index 1
high_indexxes I
not eqaul
index 2
high_indexxes J
not eqaul
index 3
high_indexxes V
katemisik
() автор топика
Ответ на: комментарий от katemisik

Ладно, обойдёмся без входных данных - они есть в гугле. Нагенерировал так:

CATEGORIES =  ["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","R","S","T","U","V","W","X","Y","Z"]
KR8877J = [
[0.002,0.006,0.004,0.045,0.002,0.017,0.006,0.077,0.001,0.035,0.042,0.005,0.004,0.039,0.001,0.002,0.001,0.008,0.058,0.352,0.002,0.007,0.017,0.004,0.007,0.007,0.007,0.004,0.005,0.009,0.089,0.036,0.053,0.041,0.004],
    [0.077, 0.004, 0.004, 0.001, 0.035, 0.007, 0.004, 0.008, 0.001, 0.005, 0.001, 0.006, 0.017, 0.007, 0.002, 0.017, 0.009, 0.002, 0.002, 0.352, 0.006, 0.004, 0.045, 0.042, 0.007, 0.002, 0.005, 0.089, 0.053, 0.041, 0.004, 0.039, 0.036, 0.058, 0.007],
    [0.035, 0.006, 0.006, 0.001, 0.002, 0.007, 0.053, 0.004, 0.002, 0.004, 0.001, 0.007, 0.039, 0.001, 0.005, 0.036, 0.077, 0.045, 0.041, 0.009, 0.002, 0.352, 0.004, 0.089, 0.058, 0.002, 0.007, 0.004, 0.005, 0.004, 0.017, 0.042, 0.008, 0.007, 0.017]
]
KR8877J_2 = [
[0.002,0.006,0.004,0.045,0.002,0.017,0.006,0.077,0.001,0.035,0.042,0.005,0.004,0.039,0.001,0.002,0.001,0.008,0.058,0.352,0.002,0.007,0.017,0.004,0.007,0.007,0.007,0.004,0.005,0.009,0.089,0.036,0.053,0.041,0.004],
    [0.006, 0.002, 0.035, 0.077, 0.001, 0.039, 0.004, 0.089, 0.017, 0.017, 0.007, 0.005, 0.008, 0.045, 0.005, 0.041, 0.036, 0.004, 0.002, 0.042, 0.002, 0.001, 0.001, 0.004, 0.006, 0.007, 0.004, 0.009, 0.007, 0.352, 0.004, 0.058, 0.002, 0.053, 0.007],
    [0.002, 0.002, 0.004, 0.002, 0.017, 0.001, 0.036, 0.045, 0.008, 0.035, 0.001, 0.004, 0.005, 0.077, 0.004, 0.006, 0.002, 0.053, 0.039, 0.058, 0.001, 0.005, 0.089, 0.042, 0.352, 0.006, 0.004, 0.041, 0.004, 0.007, 0.017, 0.007, 0.009, 0.007, 0.007]
]
seq = (KR8877J, KR8877J_2)
max_list_from_all_plates = []
threshold = 0.05

for single_lp in seq:
    max_list = []
    for sign in single_lp:
        high_indexes = []
        for prob_id in range(0, len(sign)):
            if threshold < sign[prob_id]:
                high_indexes.append([sign[prob_id], prob_id, CATEGORIES[prob_id]])
        max_list.append(high_indexes)
    max_list_from_all_plates.append(max_list)

Теперь исправленный код сравнения:

for k in range(len(max_list_from_all_plates)-1):
    # итерация max_list
    for n in range(len(max_list_from_all_plates[k])):
        # итерация high_indexes
        high_indexes = max_list_from_all_plates[k][n]
        print("============")
        print([row[2] for row in high_indexes])
        for i in range(len(high_indexes)):
            # итерация элементов внутри high_indexes
            print("-------")
            print("index", i)
            print("high_indexes_k =", high_indexes[i][2])
            print("higx_indexes_k+1 =", max_list_from_all_plates[k+1][n][i][2])
            if high_indexes[i][2] == max_list_from_all_plates[k+1][n][i][2]:
                # max_list - это корневой список, поэтому обращаемся k+1
                # для доступа к следующему элементу:
                # max_list_from_all_plates[k+1] - это следующий max_list
                # max_list_from_all_plates[k+1][n] - это high_indexes
                # в следующем max_list, под тем же индексом n
                # max_list_from_all_plates[k+1][n][i] - это элемент в hign_index
                print("equal")
            else:
                print("not equal")

Ошибка была в этой строчке:

if high_indexes[i][2] == high_indexes[i+1][2]:

Как видно, сравнение происходило в рамках одного элемента high_indexes, т. е. в элементе ['7', 'I', 'J', 'V', 'X'] каждая строка сравнивалась со слежующей ("7" == "I" и так далее).

Она заменена на:

if high_indexes[i][2] == max_list_from_all_plates[k+1][n][i][2]:

Также переписаны итерации вложенных списков, чтобы знать индексы. Теперь сравнение происходит со следующим элементом в max_list, имеющим те же индексы.

я хочу сравнить high_indexes с max_list1 с high_indexes с max_list2

Как и требовалось. Если нужно сравнивать не со следующим, а, например, пройтись по всем max_index и найти совпадения, этот код можно переписать с дополнительными уровнями вложенности (итерацией по max_list_from_all_plates внутри перебора элементов hight_indexes, т. е. скопировав текущий пример, но с другими именами переменных). Кстати, однобуквенные и малопонятные переменные (типа KR8877J) лучше не использовать - легко запутаться. Пример простой, поэтому я пренебрёг правилами чистого кода.

Это типичная ошибка декомпозиции структуры данных. Вот поэтому надо использовать IDE с дебаггером. Или хотя бы умный редактор. В Thonny есть инспектор объектов, там можно посмотреть структуру max_list_from_all_plates в удобном виде.

InterVi ★★★★
()
Ответ на: ошибка от katemisik

Ага, значит списки не одинаковой длинны. Добавим предохранители:

for k in range(len(max_list_from_all_plates)-1):
    # итерация max_list
    for n in range(
        # здесь мы выбираем минимальную длинну
        # чтобы k не выходил за пределы как текущего,
        # так и следующего списка
        min(
            len(max_list_from_all_plates[k]),
            len(max_list_from_all_plates[k+1])
        )
    ):
        # итерация high_indexes
        high_indexes = max_list_from_all_plates[k][n]
        next_high_indexes = max_list_from_all_plates[k+1][n]
        print("============")
        print([row[2] for row in high_indexes])
        for i in range(min(len(high_indexes), len(next_high_indexes))):
            # аналогично - использование min не даст выйти за пределы
            # итерация элементов внутри high_indexes
            print("-------")
            print("index", i)
            print("high_indexes_k =", high_indexes[i][2])
            print("higx_indexes_k+1 =", next_high_indexes[i][2])
            if high_indexes[i][2] == next_high_indexes[i][2]:
                print("equal")
            else:
                print("not equal")

Их всего 3:

for k in range(len(max_list_from_all_plates)-1):

Здесь отсекается последняя итерация, чтобы k не вышел за пределы длинны max_list_from_all_plates. Он уже был.

for n in range(
    min(
        len(max_list_from_all_plates[k]),
        len(max_list_from_all_plates[k+1])
    )
):

min возвращает минимальное значение из переданных аргументов. Если первый список содержит 5 элементов, а следующий - 4, вернётся значение 4 и произойдёт 4 итерации, k не выйдет за пределы.

for i in range(min(len(high_indexes), len(next_high_indexes))):

И здесь - теперь i не выйдет за пределы самого короткого high_indexes.

я хочу сравнить high_indexes с max_list1 с high_indexes с max_list2

Только сейчас заметил, что в условиях нет про совпадение индексов, нужно просто сравнить. Тогда это не тот алгоритм - нужно сравнивать элемент high_indexes с каждым элементом next_high_indexes внутри ещё одного вложенного цикла:

for k in range(len(max_list_from_all_plates)-1):
    # итерация max_list
    for n in range(
        # здесь мы выбираем минимальную длинну
        # чтобы k не выходил за пределы как текущего,
        # так и следующего списка
        min(
            len(max_list_from_all_plates[k]),
            len(max_list_from_all_plates[k+1])
        )
    ):
        # итерация high_indexes
        high_indexes = max_list_from_all_plates[k][n]
        next_high_indexes = max_list_from_all_plates[k+1][n]
        print("============")
        print([row[2] for row in high_indexes])
        for i in range(len(high_indexes)):
            # итерация элементов внутри high_indexes
            print("-------")
            print("index", i)
            print("high_indexes =", high_indexes[i][2])
            print("--")
            for d in range(len(next_high_indexes)):
                # добавляем ещё один цикл -
                # итерацию по следующему high_indexes,
                # чтобы high_indexes[i] сравнился со всеми элементами
                # next_high_indexes
                print("next_higx_indexes =", next_high_indexes[d][2])
                if high_indexes[i][2] == next_high_indexes[d][2]:
                    print("equal")
                else:
                    print("not equal")
InterVi ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.