Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 09.10.2019
Сообщений: 87

Как сравнить список со вложенным списком

10.12.2022, 12:04. Показов 2690. Ответов 33

Студворк — интернет-сервис помощи студентам
Добрый день.

Есть первая переменная в которой лежит:
[['1b110c1d1353af7681cd9a0ad31ad675a3ea122 f56787bc007', 'Конфеты Южная ночь', 1152.0, 84.0], ['4600494509605', 'Энергетический напиток Adrenaline Rush, 500 мл., ж/б', 90.0, 1.0]]

Вторая переменная в которой

[('Конфеты Южная ночь', '1b110c1d1353af7681cd9a0ad31ad675a3ea122 f56787bc007')]

И сравнении через all_res = list(set(b).symmetric_difference(set(a_r es1)))
Получаю : TypeError: unhashable type: 'list'


Python
1
2
3
4
5
b = [['1b110c1d1353af7681cd9a0ad31ad675a3ea122f56787bc007', 'Конфеты Южная ночь', 1152.0, 84.0], ['4600494509605', 'Энергетический напиток Adrenaline Rush, 500 мл., ж/б', 90.0, 1.0]]
a_res1 = [('Конфеты Южная ночь', '1b110c1d1353af7681cd9a0ad31ad675a3ea122f56787bc007')]
 
all_res = list(set(b).symmetric_difference(set(a_res1)))
print(all_res)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.12.2022, 12:04
Ответы с готовыми решениями:

Проблема со вложенным списком
Недавно закончил изучение принципов ООП в C++ , перешел на питон но не могу понять почему не работает данный код: list = ] n =...

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

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

33
1956 / 874 / 352
Регистрация: 05.09.2021
Сообщений: 1,387
10.12.2022, 12:38
Цитата Сообщение от Cemxo3 Посмотреть сообщение
Получаю : TypeError: unhashable type: 'list'
Элементами множества могут быть только неизменяемые типы данных. Тип List относится к изменяемым типам.
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,694
Записей в блоге: 29
10.12.2022, 12:40
Cemxo3, не указал переменные, что такое а_рес, что такое б? конечно список нельзя в сет загнать, сравнивай просто списки. Задача то какая, что должно быть на выходе?

Добавлено через 55 секунд
Цитата Сообщение от anton78spb Посмотреть сообщение
только неизменяемые типы данных
*Zanuda on* только хешируемые *Zanuda off*
1
2431 / 1474 / 633
Регистрация: 01.11.2021
Сообщений: 2,269
10.12.2022, 13:20
Cemxo3, или используй кортежи вместо списков.
1
 Аватар для Semen-Semenich
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,310
10.12.2022, 15:08
Python
1
2
3
4
5
b = [['1b110c1d1353af7681cd9a0ad31ad675a3ea122f56787bc007', 'Конфеты Южная ночь', 1152.0, 84.0], ['4600494509605', 'Энергетический напиток Adrenaline Rush, 500 мл., ж/б', 90.0, 1.0]]
a_res1 = [('Конфеты Южная ночь', '1b110c1d1353af7681cd9a0ad31ad675a3ea122f56787bc007')]
 
all_res = list(set(map(tuple, b)).symmetric_difference(set(a_res1)))
print(all_res)
только что вы этим хотели получить? у вас в обоих переменных разные данные
Python
1
2
>>> ('Конфеты Южная ночь', '1b110c1d1353af7681cd9a0ad31ad675a3ea122f56787bc007') ==  ('1b110c1d1353af7681cd9a0ad31ad675a3ea122f56787bc007', 'Конфеты Южная ночь', 1152.0, 84.0)
False
0
0 / 0 / 0
Регистрация: 09.10.2019
Сообщений: 87
10.12.2022, 15:17  [ТС]
Сейчас добавился такой код

Python
1
2
for b_res1 in a_res1:
   b_res1 = tuple(b_res1)

В результате имеется

b_res1 в котором :
('4600494509605', 'Энергетический напиток Adrenaline Rush, 500 мл., ж/б', 90.0, 1.0)


a_res1 в котором:
[['1b110c1d1353af7681cd9a0ad31ad675a3ea122 f56787bc007', 'Конфеты Южная ночь', 1152.0, 84.0], ['4600494509605', 'Энергетический напиток Adrenaline Rush, 500 мл., ж/б', 90.0, 1.0]]

Python
1
all_res = set(b_res1)-(set(b))
даёт результат :
{1.0, '4600494509605', 90.0, 'Энергетический напиток Adrenaline Rush, 500 мл., ж/б'}
Тут тип set, преобразую его в лист так:
Python
1
all_res1 = list(all_res)
Получаю :
[1.0, '4600494509605', 'Энергетический напиток Adrenaline Rush, 500 мл., ж/б', 90.0]

И сталкиваюсь с проблемой, что индекс меняется, мне нужно вытаскивать всегда 4600494509605(это артикул)
Пробовал в кортеж преобразовать, там тоже меняется индекс почему так происходит?
Заметил, что это появилось после set операции.
0
 Аватар для Semen-Semenich
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,310
10.12.2022, 15:41
Cemxo3, начните читать учебник иначе ваши а почему будут бесконечны и ваш код в 3 строки будет писаться лет 10
Цитата Сообщение от Cemxo3 Посмотреть сообщение
почему так происходит?
потому что первые строки любого учебника про множества говорят ''' Множества в Python – это структура данных, которые содержат неупорядоченные элементы. Элементы также не является индексированным. Как и список, множество позволяет внесение и удаление элементов. Однако, есть ряд особенных характеристик, которые определяют и отделяют множество от других структур данных:

Множество не содержит дубликаты элементов;
Элементы множества являются неизменными (их нельзя менять), однако само по себе множество является изменяемым, и его можно менять;
Так как элементы не индексируются, множества не поддерживают никаких операций среза и индексирования.'''
0
0 / 0 / 0
Регистрация: 09.10.2019
Сообщений: 87
10.12.2022, 15:53  [ТС]
Как в таком случае мне подставлять в другую переменную артикул ?
0
 Аватар для Semen-Semenich
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,310
10.12.2022, 16:18
Цитата Сообщение от Cemxo3 Посмотреть сообщение
В результате имеется
b_res1 в котором :
Цитата Сообщение от Cemxo3 Посмотреть сообщение
a_res1 в котором:
Цитата Сообщение от Cemxo3 Посмотреть сообщение
all_res = set(b_res1)-(set(b))
что то мутное у вас. откуда b? и такой результат
Цитата Сообщение от Cemxo3 Посмотреть сообщение
Получаю :
[1.0, '4600494509605', 'Энергетический напиток Adrenaline Rush, 500 мл., ж/б', 90.0]
что вы должны получить так это

all_res = set(b_res1)-(set(b))
NameError: name 'b' is not defined
0
0 / 0 / 0
Регистрация: 09.10.2019
Сообщений: 87
10.12.2022, 17:33  [ТС]
Ошибся.


Python
1
all_res = set(b_res1)-set(a_res1)
TypeError: unhashable type: 'list'

Добавлено через 7 минут
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
list1 = df.values.tolist()
    dct = {}
    for line in list1:
        if len(str(line[0])) in (8,10):
            key = line[0]
        else:
            dct.setdefault(key, []).append(line)
 
    order_number = 41084510
    res = (dct[order_number])
    a_res1 = []
    for res1 in res:
        a_res1.append(res1)
    print(a_res1)
Получаю :
[['1b110c1d1353af7681cd9a0ad31ad675a3ea122 f56787bc007', 'Конфеты Южная ночь', 1152.0, 84.0], ['4600494509605', 'Энергетический напиток Adrenaline Rush, 500 мл., ж/б', 90.0, 1.0]]

Python
1
2
3
4
5
6
7
8
order_id_last = "select pl_name,article from B2BSALE_CORE.order_content where supplier_order_id = :station_id3"
    cur.execute(order_id_last, station_id3=order_all_check_str)
    result3 = cur.fetchall()
    b = []
    for order_id_basic_last_check in result3:
        #print(order_id_basic_last_check)
        b.append(order_id_basic_last_check)
        #print(b)
Получаю :
[('Конфеты Южная ночь', '1b110c1d1353af7681cd9a0ad31ad675a3ea122 f56787bc007')]

Python
1
all_res = list(set(b).symmetric_difference(set(a_res1)))
или

Python
1
all_res = set(a_res1)-set(b)
Получаю:
TypeError: unhashable type: 'list'
0
 Аватар для Semen-Semenich
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,310
10.12.2022, 17:49
anton78spb,
Цитата Сообщение от anton78spb Посмотреть сообщение
Сообщение от Cemxo3
Получаю : TypeError: unhashable type: 'list'
Элементами множества могут быть только неизменяемые типы данных. Тип List относится к изменяемым типам.
вы читаете что вам отвечают?
Цитата Сообщение от Cemxo3 Посмотреть сообщение
Получаю :
[['1b110c1d1353af7681cd9a0ad31ad675a3ea122 f56787bc00 7', 'Конфеты Южная ночь', 1152.0, 84.0], ['4600494509605', 'Энергетический напиток Adrenaline Rush, 500 мл., ж/б', 90.0, 1.0]]
Цитата Сообщение от Cemxo3 Посмотреть сообщение
Получаю :
[('Конфеты Южная ночь', '1b110c1d1353af7681cd9a0ad31ad675a3ea122 f56787bc00 7')]
что вы хотите из этого получить? у вас в обоих результатах данные уникальны даже если в первом их привести к кортежу то
('1b110c1d1353af7681cd9a0ad31ad675a3ea12 2f56787bc00 7', 'Конфеты Южная ночь', 1152.0, 84.0) это не то же что и
('Конфеты Южная ночь', '1b110c1d1353af7681cd9a0ad31ad675a3ea122 f56787bc00 7')
разницу красным цветом видите?
0
1956 / 874 / 352
Регистрация: 05.09.2021
Сообщений: 1,387
10.12.2022, 18:18
Semen-Semenich, Я про это уже писал ТС-у.
Как сравнить два списка и записать различие в новую переменную
Только выделял не красным а жирным. Может у вас более заметно получится.
0
0 / 0 / 0
Регистрация: 09.10.2019
Сообщений: 87
10.12.2022, 18:24  [ТС]
Результат 1:
[['1b110c1d1353af7681cd9a0ad31ad675a3ea122 f56787bc007', 'Конфеты Южная ночь'], [4600494509605, 'Энергетический напиток Adrenaline Rush, 500 мл., ж/б']]
Результат 2:
[('Конфеты Южная ночь', '1b110c1d1353af7681cd9a0ad31ad675a3ea122 f56787bc007')]

Добавлено через 3 минуты
Два результата List, только один из них вложенный лист
0
 Аватар для Semen-Semenich
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,310
10.12.2022, 18:54
Cemxo3, что то вы совсем запутались и всех запутали, то одно то другое условия меняются по мере возникновения проблем.
Цитата Сообщение от Cemxo3 Посмотреть сообщение
Результат 1:
[['1b110c1d1353af7681cd9a0ad31ad675a3ea122 f56787bc00 7', 'Конфеты Южная ночь'], [4600494509605, 'Энергетический напиток Adrenaline Rush, 500 мл., ж/б']]
Результат 2:
[('Конфеты Южная ночь', '1b110c1d1353af7681cd9a0ad31ad675a3ea122 f56787bc00 7')]
что вы хотите сравнить и для чего???. допустим проверить есть ли элемент второго списка в первом? ну так нужно сравнивать одинаковые типы данных. в первом у вас списки во втором кортеж. теперь четкий и понятный надеюсь вопрос - что вы хотите получить при сравнении? проверить что элемент второго списка есть в первом или получить элемент второго которого нет в первом?
ну и для уточнения - или получить элемент который есть в одном из двух но нет в обоих?
0
0 / 0 / 0
Регистрация: 09.10.2019
Сообщений: 87
10.12.2022, 18:58  [ТС]
Хочу проверить различие в двух списках и вывести различие.
В первом списке будет больше позиций, а во втором меньше.
И далее уже после получения различия, работать с этим в другом цикле.
0
 Аватар для Semen-Semenich
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,310
10.12.2022, 19:18
Цитата Сообщение от Cemxo3 Посмотреть сообщение
Хочу проверить различие в двух списках и вывести различие
уточнение. что понимается под различием? элемент второго списка есть в первом? элемент второго которого нет в первом? элемент который есть в одном из двух но нет в обоих?
0
0 / 0 / 0
Регистрация: 09.10.2019
Сообщений: 87
10.12.2022, 19:40  [ТС]
элемент второго которого нет в первом
0
 Аватар для Semen-Semenich
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,310
10.12.2022, 19:41
теперь примеры. первый список для обработки и второй список. что у вас там.
0
0 / 0 / 0
Регистрация: 09.10.2019
Сообщений: 87
10.12.2022, 19:52  [ТС]
В a_res1 результат:

['1b110c1d1353af7681cd9a0ad31ad675a3ea122 f56787bc007', 'Конфеты Южная ночь'], [4600494509605, 'Энергетический напиток Adrenaline Rush, 500 мл., ж/б']]

В b результат:

[('Конфеты Южная ночь', '1b110c1d1353af7681cd9a0ad31ad675a3ea122 f56787bc007')]
0
 Аватар для Semen-Semenich
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,310
10.12.2022, 19:58
Цитата Сообщение от Cemxo3 Посмотреть сообщение
элемент второго которого нет в первом
в вашем примере нет такого. элемент второго есть в первом если это имеется ввиду. только разница в типах и порядке данных в кортеже
['1b110c1d1353af7681cd9a0ad31ad675a3ea122 f56787bc00 7', 'Конфеты Южная ночь']
('Конфеты Южная ночь', '1b110c1d1353af7681cd9a0ad31ad675a3ea122 f56787bc00 7')

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
def element_not_in_first(arg_1, arg_2):
    ''' вернет элементы которые
        есть во втором но нет в первом'''
    result = []
    for elem_2 in arg_2:
        flag =1
        for elem_1 in arg_1:
            if set(elem_2) == set(elem_1):
                flag = 0
                break
        if flag:
            result.append(elem_2)
    return result
                  
 
b_res = [['1b110c1d1353af7681cd9a0ad31ad675a3ea122f56787bc007', 'Конфеты Южная ночь'],
         ['4600494509605', 'Энергетический напиток Adrenaline Rush, 500 мл., ж/б', 90.0, 1.0]]
a_res = [('Конфеты Южная ночь', '1b110c1d1353af7681cd9a0ad31ad675a3ea122f56787bc007')]
 
print(element_not_in_first(a_res, b_res))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.12.2022, 19:58
Помогаю со студенческими работами здесь

сделать 3 класса: список, стек(списком), очередь(списком)
Дали задание на лабораторную: 3 класса: список, стек, очередь. Методы: вывод, добавление, удаление. Использовать при обращении указатель...

Поле Со Списком (как Добавить Пункт В Список)
Задача простая. Есть поле со списком, точнее поля. В которых пользователь выбирает значения. Но некоторые значения необходимо в этот список...

Как сравнить класс и список по критериям?
Есть класс DB class DB { private List<string> newList; public string Naimenovanie { get; set; } public string Url {...

Как вытаскивать значения из поля со списком в обычный список
Здравствуйте, как можно добавить в список (Список 43) несколько значений из выпадающего списка индивидуальный номер (при добавлении новых...

Обещание сравнить со Списком Значений
Здравствуйте, уважаемые. Есть у меня список значений "Кнопки". Необходимо задать АСИНХ вопрос пользователю, делаю это так: Кнопки = Новый...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита табличной части. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru