Int*_*ion 1 python set set-union
鉴于:
setA = [(1, 25), (2, 24), (3, 23), (4, 22), (5, 21), (6, 20),
(7, 19), (8, 18), (9, 17), (10, 16), (11, 15), (12, 14),
(13, 13),(14, 12), (15, 11), (16, 10), (17, 9), (18, 8),
(19, 7),(20, 6), (21, 5), (22, 4), (23, 3), (24, 2), (25, 1)]
setB = [(1, 19), (2, 18), (3, 17), (4, 16), (5, 15), (6, 14), (7, 13),
(8, 12), (9, 11), (10, 10), (11, 9), (12, 8), (13, 7), (14, 6),
(15, 5), (16, 4), (17, 3), (18, 2), (19, 1)]
Run Code Online (Sandbox Code Playgroud)
如何将每组中每个元组的第一个元素组合为两个集合作为公共键值.因此,对于每组中位置1的元组,它将分别为(1,25)和(1,19).加入到一起会产生:(25,1,19)
(25,1,19)
(24,2,18)
(23,3,17)
...
(7,19,1)
(6,20,none)
...
(2,24,none)
(1,25,none)
Run Code Online (Sandbox Code Playgroud)
注意:必须保持输出元组的顺序.例:
(setA value, common value, setB value)
(setA value, common value, setB value)etc...
Run Code Online (Sandbox Code Playgroud)
注意:必须使用Python 2.7x标准库
我正在尝试做类似的事情,[(a,b,c) for (a,b),(b,c) in zip(setA,setB)]但我并不完全理解正确的语法和逻辑.
谢谢.
看起来像你想要的可以像setB列表理解中的字典查找一样容易地实现.
mapping = dict(setB)
out = [(b, a, mapping.get(a)) for a, b in setA]
Run Code Online (Sandbox Code Playgroud)
print(out)
[(25, 1, 19),
(24, 2, 18),
(23, 3, 17),
(22, 4, 16),
(21, 5, 15),
(20, 6, 14),
(19, 7, 13),
(18, 8, 12),
(17, 9, 11),
(16, 10, 10),
(15, 11, 9),
(14, 12, 8),
(13, 13, 7),
(12, 14, 6),
(11, 15, 5),
(10, 16, 4),
(9, 17, 3),
(8, 18, 2),
(7, 19, 1),
(6, 20, None),
(5, 21, None),
(4, 22, None),
(3, 23, None),
(2, 24, None),
(1, 25, None)]
Run Code Online (Sandbox Code Playgroud)