python如何求嵌套列表的交集?

ImN1 2012-12-02 06:27:50
a = [[8, 6, 3], [3, 4, 5], [5, 2, 7]]
b = [[2, 5, 4], [6, 8, 5]]

python3.3
a[i][0]==b[j][1] and a[i][1]==b[j][0]同时满足的情况

返回 [[8, 6, 3], [5, 2, 7]]

a,b各嵌套一层,但可能有数万个item,以减少循环为佳,故不想用穷举方法
...全文
293 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ImN1 2012-12-03
  • 打赏
  • 举报
回复
这个简单点,偶喜欢……也看得明白,嘿嘿
引用 4 楼 angel_su 的回复:
tuple元组也可以做key,按你的需求转化b成集合或字典即可... >>> a = [[8, 6, 3], [3, 4, 5], [5, 2, 7]] >>> b = [[2, 5, 4], [6, 8, 5]] >>> set_b = {(x, y) for x, y, z in b} >>> set_b set([(2, 5), (6, 8)]) >……
angel_su 2012-12-03
  • 打赏
  • 举报
回复
tuple元组也可以做key,按你的需求转化b成集合或字典即可... >>> a = [[8, 6, 3], [3, 4, 5], [5, 2, 7]] >>> b = [[2, 5, 4], [6, 8, 5]] >>> set_b = {(x, y) for x, y, z in b} >>> set_b set([(2, 5), (6, 8)]) >>> [i for i in a if (i[1], i[0]) in set_b] [[8, 6, 3], [5, 2, 7]] >>>
ImN1 2012-12-02
  • 打赏
  • 举报
回复
引用 1 楼 qq120848369 的回复:
这么说就很简单了, 用每一个元素的前2个元素作为key(b的要把顺序颠倒一下), a和b分别做自己的映射, 最后直接就得到了.
初步看了一看,用其中的值组成字典吧?这个之前也想过,因为写惯了php的数组,和py的字典很相似 但担心是否会范围py的key规定,因为值不仅数字,有可能是unicode字串,用韩文测试了下也可以……
ImN1 2012-12-02
  • 打赏
  • 举报
回复
映射还不会,先留下做例程学习,嘿嘿
qq120848369 2012-12-02
  • 打赏
  • 举报
回复
这么说就很简单了, 用每一个元素的前2个元素作为key(b的要把顺序颠倒一下), a和b分别做自己的映射, 最后直接就得到了.
#python 3.2
#coding=gb2312

def make_mapping(data, reverse = False):
    mapping = {}
    for elem in data:
        if reverse:
            key = str(elem[1]) + ":" + str(elem[0])
        else:
            key = str(elem[0]) + ":" + str(elem[1])
        if key in mapping:
            mapping[key].append(elem)
        else:
            mapping[key] = [elem]
    return mapping

def make_result(mapping_a, mapping_b):
    result = []
    for key, lst in mapping_a.items():
        if key in mapping_b:
            result.extend(lst)
    return result

if __name__ == "__main__":
    a = [[8, 6, 3], [3, 4, 5], [5, 2, 7]]
    b = [[2, 5, 4], [6, 8, 5]]
    mapping_a = make_mapping(a)
    mapping_b = make_mapping(b, True)
    result = make_result(mapping_a, mapping_b)
    print(result)

[[8, 6, 3], [5, 2, 7]]

37,721

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧