Скажімо, у мене є два set()
s:
a = {('1', '2', '3', 'a'), ('1', '2', '4', 'a'), ('1', '2', '5', 'b')}
b = {('1', '2', '3', 'b'), ('1', '2', '4', 'b'), ('1', '2', '6', 'b')}
Тепер, що я хочу зробити, це знайти різницю набору, b \ a
але ігноруючи останній елемент з кожного кортежу. Тож це просто так:
a = {('1', '2', '3'), ('1', '2', '4'), ('1', '2', '5')}
b = {('1', '2', '3'), ('1', '2', '4'), ('1', '2', '6')}
In[1]: b - a
Out[1]: {('1', '2', '6')}
Очікуваний вихід:
b \ a = {('1', '2', '6', 'b')}
Чи є якийсь очевидний / пітонічний спосіб цього досягти без необхідності вручну перебирати над кожним набором і не перевіряти проти кожного tuple[:3]
?
set
та перезаписати різницю. Я не знаю жодного нестандартного рішення, і я сумніваюся, що таке існує.
aa = { t[:3] for t in a }
tuple
і переопределить оператор різниці