python列表反向和合并

时间:2015-10-10 09:00:28

标签: python tuples reverse

我有这两个列表

a = [(0,1), (1,2), (3,4)]
b = [[(0,1), (6,7), (8,9)], [(4,5), (7,15), (20,25)], [(18,17), (3,4)]]

我需要检查b中是否存在第一个元组然后合并其反向 所以期望的产出是

ab = [[(3,4),(1,2),(0,1),(6,7), (8,9)], [(4,5), (7,15), (20,25)], [(18,17),(3,4)]]

我的示例代码是:

import copy
ab = copy.deepcopy(b)

for coord in b:
    if a[0] in coord:
        #print "Yes", coord.index(a[0])
        ab.insert(coord.index(a[0]), a[::-1])

print ab

但它并没有给我我想要的输出。谁有人可以提供帮助?感谢

1 个答案:

答案 0 :(得分:1)

使用列表推导来重建b

ab = [a[:0:-1] + sub if a[0] in sub else sub for sub in b]

a[:0:-1]切片不仅会反转a,还会排除a的第一个元素,以防止输出中出现重复:

>>> a = [(0,1), (1,2), (3,4)]
>>> b = [[(0,1), (6,7), (8,9)], [(4,5), (7,15), (20,25)], [(18,17), (3,4)]]
>>> [a[:0:-1] + sub if a[0] in sub else sub for sub in b]
[[(3, 4), (1, 2), (0, 1), (6, 7), (8, 9)], [(4, 5), (7, 15), (20, 25)], [(18, 17), (3, 4)]]