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

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

10.12.2022, 12:04. Показов 2603. Ответов 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
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,667
Записей в блоге: 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
5222 / 3469 / 1173
Регистрация: 21.03.2016
Сообщений: 8,295
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
5222 / 3469 / 1173
Регистрация: 21.03.2016
Сообщений: 8,295
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
5222 / 3469 / 1173
Регистрация: 21.03.2016
Сообщений: 8,295
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
5222 / 3469 / 1173
Регистрация: 21.03.2016
Сообщений: 8,295
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
5222 / 3469 / 1173
Регистрация: 21.03.2016
Сообщений: 8,295
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
5222 / 3469 / 1173
Регистрация: 21.03.2016
Сообщений: 8,295
10.12.2022, 19:18
Цитата Сообщение от Cemxo3 Посмотреть сообщение
Хочу проверить различие в двух списках и вывести различие
уточнение. что понимается под различием? элемент второго списка есть в первом? элемент второго которого нет в первом? элемент который есть в одном из двух но нет в обоих?
0
0 / 0 / 0
Регистрация: 09.10.2019
Сообщений: 87
10.12.2022, 19:40  [ТС]
элемент второго которого нет в первом
0
 Аватар для Semen-Semenich
5222 / 3469 / 1173
Регистрация: 21.03.2016
Сообщений: 8,295
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
5222 / 3469 / 1173
Регистрация: 21.03.2016
Сообщений: 8,295
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
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru