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

Как сравнить два списка и записать различие в новую переменную

09.12.2022, 16:13. Показов 970. Ответов 11

Студворк — интернет-сервис помощи студентам
Всем привет.
Есть первый запрос
order_id_basic = "select name,article from B2BSALE_CORE.order_content where supplier_order_id = :station_id2"
cur.execute(order_id_basic, station_id2=order_check_basic_str)
result2 = cur.fetchall()
for order_id_basic_check in result2:
print(order_id_basic_check)
Результат выполнение :
('Напиток энергетический Adrenaline Rush, 500 мл., ж/б', '4600494509605')
('Печень трески Беринг, 120 гр., ж/б', '5702024007069')
('Напиток Coca-Cola газированный СЛИМ, 330 мл, ж/б', '5449000008046')
('Конфеты Красный Октябрь Южная ночь, 7 кг., картон', '1b110c1d1353af7681cd9a0ad31ad675a3ea122 f56787bc007')
('Шпроты "Экватор" в масле №2 тест', '4820062440042')

Делаю второй запрос
order_id_last = "select 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()
for order_id_basic_last_check in result3:
print(order_id_basic_last_check)
Результат выполнение:
('Конфеты Красный Октябрь Южная ночь, 7 кг., картон 7 кг', '1b110c1d1353af7681cd9a0ad31ad675a3ea122 f56787bc007')
('Напиток Coca-Cola газированный СЛИМ, 330 мл, ж/б 330 мл', '5449000008046')
('Напиток энергетический Adrenaline Rush, 500 мл., ж/б 500 мл', '4600494509605')
('Шпроты "Экватор" в масле №2 тест 2 кг', '4820062440042')

Во втором списке отсутствует 'Печень трески Беринг, 120 гр., ж/б', '5702024007069'

Хочу найти различие между списками и вывести позицию, которой нет.
c = set(order_id_basic_check)-set(order_id_basic_last_check)
print(c)
Результат выполнения:
{'Шпроты "Экватор" в масле №2 тест'}

В чём моя ошибка?
Сравнение делаю после цикла
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.12.2022, 16:13
Ответы с готовыми решениями:

Как сравнить два списка
Есть два списка var lst1 = new List<string>(){"1","2","3"}; var lst2 = new List<string>(){"4","2","3"}; С помощью Intersect я...

Как сравнить два списка в xls ?
Всем привет! Стоит офис2013. Прошу не судить строго за Чайниковсикй вопрос я только учусь. Есть два файла xls (колонка А) в одном...

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

11
 Аватар для Semen-Semenich
5222 / 3469 / 1173
Регистрация: 21.03.2016
Сообщений: 8,295
09.12.2022, 16:28
Cemxo3, открой для себя теги PYTHON для этого вставив код в сообщение выделяешь его от начала до конца и жмешь кнопку PYTHON в верху окна. отправляешь и будет нормальный код с отступами
0
0 / 0 / 0
Регистрация: 09.10.2019
Сообщений: 87
09.12.2022, 16:38  [ТС]
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
order_id_basic = "select name,article from B2BSALE_CORE.order_content where supplier_order_id = :station_id2"
    cur.execute(order_id_basic, station_id2=order_check_basic_str)
    result2 = cur.fetchall()
 
    for order_id_basic_check in result2:
        #print(order_id_basic_check)
        pass
order_id_last = "select 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()
 
    for order_id_basic_last_check in result3:
        pass
c = set(order_id_basic_check)-set(order_id_basic_last_check)
print(c)
Добавлено через 2 минуты
Если выполняю такой код, то он работает.

Python
1
2
3
4
d = ['арбуз','дыня','яблоко']
    f = ['арбуз','дыня']
    q = set(d) - set(f)
    print(q)
Результат :
{'яблоко'}
0
1956 / 874 / 352
Регистрация: 05.09.2021
Сообщений: 1,387
09.12.2022, 16:43
Цитата Сообщение от Cemxo3 Посмотреть сообщение
Результат выполнения:
{'Шпроты "Экватор" в масле №2 тест'}
Вообще не понятно, как вы это смогли получить, т.к. у вас в обоих множествах нет идентичных элементов.
Это даже визуально видно по длине строк.
Цитата Сообщение от Cemxo3 Посмотреть сообщение
('Напиток энергетический Adrenaline Rush, 500 мл., ж/б', '4600494509605')
('Печень трески Беринг, 120 гр., ж/б', '5702024007069')
('Напиток Coca-Cola газированный СЛИМ, 330 мл, ж/б', '5449000008046')
('Конфеты Красный Октябрь Южная ночь, 7 кг., картон', '1b110c1d1353af7681cd9a0ad31ad675a3ea122 f56787bc00 7')
('Шпроты "Экватор" в масле №2 тест', '4820062440042')
Цитата Сообщение от Cemxo3 Посмотреть сообщение
('Конфеты Красный Октябрь Южная ночь, 7 кг., картон 7 кг', '1b110c1d1353af7681cd9a0ad31ad675a3ea122 f56787bc00 7')
('Напиток Coca-Cola газированный СЛИМ, 330 мл, ж/б 330 мл', '5449000008046')
('Напиток энергетический Adrenaline Rush, 500 мл., ж/б 500 мл', '4600494509605')
('Шпроты "Экватор" в масле №2 тест 2 кг', '4820062440042')
Соответственно результатом операции set(a) - set(b) у вас должно получиться первое множество.
0
0 / 0 / 0
Регистрация: 09.10.2019
Сообщений: 87
09.12.2022, 16:50  [ТС]
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
order_id_basic = "select name,article from B2BSALE_CORE.order_content where supplier_order_id = :station_id2"
    cur.execute(order_id_basic, station_id2=order_check_basic_str)
    result2 = cur.fetchall()
 
    for order_id_basic_check in result2:
        order_id_basic_check1 = order_id_basic_check[1]
        print(order_id_basic_check1)
 
order_id_last = "select 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()
 
    for order_id_basic_last_check in result3:
 
        order_id_basic_last_check1 = order_id_basic_last_check[1]

А если так?
0
 Аватар для Semen-Semenich
5222 / 3469 / 1173
Регистрация: 21.03.2016
Сообщений: 8,295
09.12.2022, 16:52
чуть ошибка с операцией
set.symmetric_difference(other); set ^ other - множество из элементов, встречающихся в одном множестве, но не встречающиеся в обоих.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
order_id_basic_check = [
('Конфеты Красный Октябрь Южная ночь, 7 кг., картон 7 кг', '1b110c1d1353af7681cd9a0ad31ad675a3ea122f56787bc00 7'),
('Печень трески Беринг, 120 гр., ж/б', '5702024007069'),
('Напиток Coca-Cola газированный СЛИМ, 330 мл, ж/б 330 мл', '5449000008046'),
('Напиток энергетический Adrenaline Rush, 500 мл., ж/б 500 мл', '4600494509605'),
('Шпроты "Экватор" в масле №2 тест 2 кг', '4820062440042'),
]
 
order_id_basic_last_check = [
('Конфеты Красный Октябрь Южная ночь, 7 кг., картон 7 кг', '1b110c1d1353af7681cd9a0ad31ad675a3ea122f56787bc00 7'),
('Напиток Coca-Cola газированный СЛИМ, 330 мл, ж/б 330 мл', '5449000008046'),
('Напиток энергетический Adrenaline Rush, 500 мл., ж/б 500 мл', '4600494509605'),
('Шпроты "Экватор" в масле №2 тест 2 кг', '4820062440042')
]
    
c = set(order_id_basic_check).symmetric_difference(set(order_id_basic_last_check))
print(c)
Добавлено через 1 минуту
информация. множества
1
2431 / 1474 / 633
Регистрация: 01.11.2021
Сообщений: 2,269
09.12.2022, 16:57
Вообще, судя по условию, необходимо пересечение print(s1 ^ s2), результат товары содержащиеся только в одном множестве.
Но выше сказали, что оно будет бесполезно, т.к. данные странные.

Поэтому лучше делать все в запросе сразу, но судя по примеру данные странные в базе.
Вот ты выбираешь имя и артикул:
('Конфеты Красный Октябрь Южная ночь, 7 кг., картон 7 кг', '1b110c1d1353af7681cd9a0ad31ad675a3ea122 f56787bc00 7')
Что в этой строке имя, а что артикул?
0
0 / 0 / 0
Регистрация: 09.10.2019
Сообщений: 87
09.12.2022, 17:05  [ТС]
Сейчас я взял другое имя товаров и передал запрос.

Python
1
2
3
4
5
6
order_id_basic = "select pl_name,article from B2BSALE_CORE.order_content where supplier_order_id = :station_id2"
    cur.execute(order_id_basic, station_id2=order_check_basic_str)
    result2 = cur.fetchall()
 
    for order_id_basic_check in result2:
        print(order_id_basic_check)
Результат :
('Энергетический напиток Adrenaline Rush, 500 мл., ж/б', '4600494509605')
('Печень Трески Ключ Беринг, 120г', '5702024007069')
('КОКА-КОЛА 330 МЛ Ж/Б', '5449000008046')
('Конфеты Южная ночь', '1b110c1d1353af7681cd9a0ad31ad675a3ea122 f56787bc007')
('Шпроты "Экватор" в масле №2', '4820062440042')

Python
1
2
3
4
5
6
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()
 
    for order_id_basic_last_check in result3:
        print(order_id_basic_last_check)
Результат:
('Конфеты Южная ночь', '1b110c1d1353af7681cd9a0ad31ad675a3ea122 f56787bc007')
('КОКА-КОЛА 330 МЛ Ж/Б', '5449000008046')
('Энергетический напиток Adrenaline Rush, 500 мл., ж/б', '4600494509605')
('Шпроты "Экватор" в масле №2', '4820062440042')


Python
1
2
c = set(order_id_basic_check).symmetric_difference(set(order_id_basic_last_check))
print (c)
Результат:
set()

Добавлено через 1 минуту
'Конфеты Красный Октябрь Южная ночь, 7 кг., картон 7 кг -имя
1b110c1d1353af7681cd9a0ad31ad675a3ea122f 56787bc007 - артикул
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
09.12.2022, 17:05
Тут вам sql нужно учить…

SQL
1
2
3
SELECT name,article FROM B2BSALE_CORE.order_content WHERE supplier_order_id = :station_id2
EXCEPT
SELECT name,article FROM B2BSALE_CORE.order_content WHERE supplier_order_id = :station_id3;
Или взять WHERE NOT EXISTS
0
0 / 0 / 0
Регистрация: 09.10.2019
Сообщений: 87
09.12.2022, 17:42  [ТС]
Результат:
set()
0
 Аватар для Semen-Semenich
5222 / 3469 / 1173
Регистрация: 21.03.2016
Сообщений: 8,295
09.12.2022, 17:49
Лучший ответ Сообщение было отмечено Cemxo3 как решение

Решение

Cemxo3,
Цитата Сообщение от Cemxo3 Посмотреть сообщение
Сейчас я взял другое имя товаров и передал запрос
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
order_id_basic_check = [
('Энергетический напиток Adrenaline Rush, 500 мл., ж/б', '4600494509605'),
('Печень Трески Ключ Беринг, 120г', '5702024007069'),
('КОКА-КОЛА 330 МЛ Ж/Б', '5449000008046'),
('Конфеты Южная ночь', '1b110c1d1353af7681cd9a0ad31ad675a3ea122f56787bc00 7'),
('Шпроты "Экватор" в масле №2', '4820062440042')
]
 
order_id_basic_last_check = [
('Конфеты Южная ночь', '1b110c1d1353af7681cd9a0ad31ad675a3ea122f56787bc00 7'),
('КОКА-КОЛА 330 МЛ Ж/Б', '5449000008046'),
('Энергетический напиток Adrenaline Rush, 500 мл., ж/б', '4600494509605'),
('Шпроты "Экватор" в масле №2', '4820062440042')
]
    
c = set(order_id_basic_check).symmetric_difference(set(order_id_basic_last_check))
print(c)
{('Печень Трески Ключ Беринг, 120г', '5702024007069')}
0
0 / 0 / 0
Регистрация: 09.10.2019
Сообщений: 87
09.12.2022, 17:51  [ТС]
Так код работает, но мой не работал, поэтому в цикле я добавлял результат в новый список через append и потом уже производил операции и мне это помогло.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.12.2022, 17:51
Помогаю со студенческими работами здесь

Как из строки записать в новую переменную слова начинающиеся и оканчивающиеся на гласные буквы ?
То есть например hello my name is bob and it`s easy remember нужно,чтобы слово easy записалось в новую переменную и так с любой схожей...

Как сравнить два двухмерных массива и записать результат в третий?
Программа тест. Как сравнить два двумерных массива типа bool и записать ответы где правильные или нет в третий массив?

Как сравнить два массива и наибольшее из их значений записать в новый массив
Как сравнить два целочисленных массива (A и B) и наибольшее значение записать в новый массив С. Также, нужно вывести все массивы. ...

Можно ли как то два числа записать в одну переменную?
Проблема заключается в том, что функция getch() иногда возвращает 2 числа (при нажатии на доп. клавиши). И я бы хотел эти 2 числа как-то...

Записать два и больше чисел как одно в переменную
Как можно записать два и больше чисел как одно. Например, числа из трех перемменных a=9, b=7, c=5 записать в четвертую переменную как 975?


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
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. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru