Python代码阅读(第16篇):列表求差集

Python67

本篇阅读三种不同的列表差集的实现方式。分别是列表直接求差 difference,列表中所有元素根据条件函数求差 difference_by,列表中所有元素根据条件函数求对称差 symmetric_difference_by

difference

def difference(a, b):
  _b = set(b)
  return [item for item in a if item not in _b]

EXAMPLES
difference([1, 2, 3], [1, 2, 4]) # [3]

difference函数返回两个可迭代对象之间的差。该函数从 b中创建一个集合 _b,然后在 a上使用列表推导式,只保留 _b中不包含的值。该函数中 ab是有顺序关系的, a-b是从 a中删除 b中包含的数据。

setPython的一个特殊的数据类型,是由不重复元素组成的无序的集。本函数直接使用 set类型消除了列表中的重复元素。

difference_by

def difference_by(a, b, fn):
  _b = set(map(fn, b))
  return [item for item in a if fn(item) not in _b]

EXAMPLES
from math import floor
difference_by([2.1, 1.2], [2.3, 3.4], floor) # [1.2]
difference_by([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], lambda v : v['x']) # [ { x: 2 } ]

difference_by函数接收两个列表和一个过滤条件函数。将提供的函数应用于两个列表中的每个元素后,返回两个原始列表的差。函数通过对 b中的每个元素应用 fn来创建一个集合,然后在 a上使用列表推导式与 fn相结合,只保留之前创建的集合 _b中没有包含的值。

特别的,当过滤条件函数是 lamda x:x时,函数转化为直接求取两个列表的差。

symmetric_difference_by

def symmetric_difference_by(a, b, fn):
  _a, _b = set(map(fn, a)), set(map(fn, b))
  return [item for item in a if fn(item) not in _b] + [item for item in b if fn(item) not in _a]

EXAMPLES
from math import floor
symmetric_difference_by([2.1, 1.2], [2.3, 3.4],floor) # [1.2, 3.4]

symmetric_difference_by函数对两个列表中的每个列表元素应用所提供的函数后,返回两个原始列表之间的对称差。函数通过分别对每个列表中的每个元素应用 fn来创建两个集合 _a_b,然后在每个元素上使用列表理解与 fn相结合,只保留不包含在之前创建的其他集合中的值(在 a 中,不在 _b中;在 b中,不在 _a中。)。

特别的,当过滤条件函数是 lamda x:x时,函数转化为直接求取两个列表的对称差。

Original: https://www.cnblogs.com/felixz/p/15411043.html
Author: FelixZ
Title: Python代码阅读(第16篇):列表求差集



相关阅读1

Title: 设计模式(Python语言)----代理模式

推荐文章

2023年,摸鱼计划系列活动又跟大家见面了,我们活动规则不变,福利升级! 新的一年,继续把工作学习中的bug处理、碎片知识,统统记录到博客里。留下自己在技术之路的成长足迹。
推荐原创51CTO博客13天前10000+阅读11点赞733评论1收藏

在51CTO博客成功发布第一篇博文,可领取新人福利,奖品三选一。来分享属于自己的技术踩坑经验吧!
推荐原创51CTO博客95天前10000+阅读16点赞11评论5收藏

;
原创Marydon2小时前132阅读点赞评论收藏

出现网关不亮灯的原因就是配置问题,仔细检查网关和微端程序的IP地址有没有填错,如有填错更改过来即可。​微端无连接不更新的问题解决方法​1、端口不对​微端没有更新,玩家进入游戏是地图跟装备都看不见,是漆黑的,微端显示连接失败,好吧,那么从头开始检查,检查什么地方呢,第一检查微端网关程序,看看上面是否全部显示连接成功了,如果是成功的,那么看一下列表里面的端口对不对的上​服务器IP都是连接成功的,没有连
原创会开服的小杰2小时前147阅读1点赞评论收藏

本文首发自「慕课网」,想了解更多IT干货内容,程序员圈内热闻,欢迎关注!作者|慕课网精英讲师 然冬基于 IEEE 754 标准的双精度 64 位二进制格式的值(-(253 -1) 到 253 -1)。——MDN在 JavaScript 只有浮点数(可以理解成带有小数点的数)。数字就是我们日常使用的数字,在 JavaScript 中默认是十进制的。10;-1;1.1;10.0;+0;-0;99999
原创imooc慕课君2小时前154阅读点赞评论收藏

本篇介绍下flea-jersey模块的文件下载功能
原创Huazie2小时前143阅读点赞评论收藏

_app.js只加入一个 ThemeProvide 具体在 ThemeProvide 中import type { AppProps } from "next/app
原创JediHongbin2小时前146阅读点赞评论收藏

概念数据库连接池其实就是一个容器(集合),存放数据库连接的容器。当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问完之后,会将连接对象归还给容器。好处1.节约资源2.用户访问高效实现标准接口:DataSource javax.sql包下的方法:获取连接:getConnection()归还连接:Connection.close()。如果连接对
原创共饮一杯无2小时前138阅读1点赞评论1收藏

项目中需要自定义icon,在项目中通用html使用css样式.icon-save { /使用自己的图片来替换/ background: url('图片地址') center no-repeat; background-size: contain;}.icon-save::before { /*before
原创不叫猫先生3小时前138阅读点赞评论收藏

二叉树的锯齿形层序遍历(树、广度优先搜索)给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。例如:给定二叉树3,9,20,null,null,15,7,3/\920/\157返回锯齿形层序遍历如下:3,20,9,15,7解答:javapublicclassTreeNode{intval;TreeNodeleft;TreeNode
原创共饮一杯无3小时前141阅读1点赞评论1收藏

1.情景展示 where限制条件后面如果想要加select语句的话,如何实现? 2.原因分析 通常情况下,where后面跟的是:clo
原创Marydon3小时前150阅读点赞评论收藏

编码进化回忆上次内容上次 研究了 视频终端的 演化 从VT05 到 VT100从 黑底绿字 到 RGB 24位真彩色形成了 VT100选项从而 将颜色 ​​数字化​​ 了生活中我们更常用 10个数字 但是 计算机中 用二进制日常计数的十进制数 是如何存储进计算机的呢??从10进制到2进制日常生活中 为什么用10进制? 是因为 人的生理结构计算机中 使用2进制 是因为 计算机的生理结构 电灯、开关
原创overmind19803小时前134阅读点赞评论收藏

程序员的日历,真的不用上网查,直接一条命令就可以默认显示本月的日历(20230214)bashcal二月2023日一二三四五六12345678910111213141516171819202122232425262728显示指定年份的日历bashcaly20232023一月二月三月日一二三四五六日一二三四五六日一二三四五六12345671234123489101112131456789101156
原创彭世瑜3小时前140阅读点赞评论收藏

效果如下图所示:我们实际上使用了2D来模拟3D效果。!(https://s2.51cto.com/images/blog/202302/14095121_63eae919a42774018.png?xossprocess=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20
原创JerryWang汪子熙3小时前148阅读点赞评论收藏

写在前面+K9s是一个基于终端UI的K8S管理工具+博文内容为k9s在windows、Linux以及docker安装Demo+简单的热键使用。+理解不足小伙伴帮忙指正
原创山河已无恙3小时前136阅读点赞评论收藏

写在前面+kubebox是一个轻量的k8s管理工具,可以基于命令行终端或Web端+博文内容涉及:kubebox不同方式的安装下载,简单使用。+如果希望轻量一点,个人很推荐这个工具,轻量,而且使用简单。+理解不足小伙伴帮忙指正我所渴求的,無非是將心中脫穎語出的本性付諸生活,為何竟如此艱難呢赫尔曼·黑塞《德米安》简单介绍Kubebox是一个类似k9s的基于命令行终端的k8s管理工具,可以直接下载可执行
原创山河已无恙3小时前143阅读点赞评论收藏

本文将给大家分享Java并发编程相关的知识点,具体将对Java常见的并发编程方式和手段进行总结,以便可以从使用角度更好地感知Java并发编程带来的效果。
原创京东云开发者3小时前146阅读点赞评论收藏

软件开发入门教程网Bootstrap4 面包屑导航(Breadcrumb)面包屑导航是一种基于网站层次信息的显示方式。以博客为例,面包屑导航可以显示发布日期、类别或标签。它们表示当前页面在导航层次结构内的位置,是在用户界面中的一种导航辅助。Bootstrap 中的面包屑导航是一个简单的带有 .breadcrumb class 的无序列表。分隔符会通过 CSS(bootstrap
原创雪奈椰子3小时前136阅读点赞评论收藏

一、前言 - webpack热更新​​Hot Module Replacement​​,简称​​HMR​​,无需完全刷新整个页面的同时,更新模块。​​HMR​​的好处,在日常开发工作中体会颇深:节省宝贵的开发时间、提升开发体验。刷新我们一般分为两种:一种是页面刷新,不保留页面状态,就是简单粗暴,直接​​window.location.reload()​​。另一种是基于​​WDS (Webpack-
原创Seattle小小瓜3小时前136阅读点赞评论收藏

1.背景Spring的核心思想就是容器,当容器refresh的时候,外部看上去风平浪静,其实内部则是一片惊涛骇浪,汪洋一片。Springboot更是封装了Spring,遵循约定大于配置,加上自动装配的机制。很多时候我们只要引用了一个依赖,几乎是零配置就能完成一个功能的装配。我非常喜欢这种自动装配的机制,所以在自己开发中间件和公共依赖工具的时候也会用到这个特性。让使用者以最小的代价接入。想要把自动装
原创Seattle小小瓜3小时前135阅读点赞评论收藏

一. pyinstaller和Nuitka使用感受1.1 使用需求这次也是由于项目需要,要将python的代码转成exe的程序,在找了许久后,发现了2个都能对python项目打包的工具——pyintaller和nuitka。这2个工具同时都能满足项目的需要:隐藏源码。这里的pyinstaller是通过设置key来对源码进行加密的;而nuitka则是将python源码转成C++(这里得到的是二进制的
原创LinkSLA3小时前146阅读点赞评论收藏

本文主要讲述了Android客户端模块化开发的痛点及解决方案,详细讲解了方案的实现思路和具体实现方法。
原创vivo互联网3小时前136阅读点赞评论收藏

Original: https://blog.51cto.com/u_11160105/5515025
Author: redrose2100
Title: 设计模式(Python语言)----代理模式

相关阅读2

Title: Python+Django实现基于人脸识别的门禁管理系统【源码】

项目介绍

基于人脸识别的门禁管理系统

(Python+Django+RESTframework+JsonWebToken+Redis+Dlib)

该项目为宿舍门禁系统管理,并额外加入宿舍管理、水电费管理、在线充值、报修管理、系统日志等多项功能,详细见下方截图等。

Django为后端、H5/CSS/JS为前端、MySQL为后端数据库、Redis为缓存、Dlib为人脸识别程序库。

该项目可作为个人学校毕业设计使用,未考虑生产环境,后续开发随心。

食用方法

1、首先下载项目源码文件(获取方法在本文结尾处)

Python代码阅读(第16篇):列表求差集

2、运行MySQL和Redis,并在setting.py文件中配置数据库链接信息。

  • MySQL数据库使用5.7.27开发,建议使用相同版本(应该mysqlclient有向上兼容
  • 项目自带Windows系统调试用Redis-x64-3.2.100,默认监听127.0.0.1,6379端口,requirepass为Qq111111

3、修改setting.py文件,进行下一步配置。

  • SMTP(邮箱SMTP功能,用于账户登录提示、邮箱发送验证码等功能)
  • ALiCloud_AFS(阿里云AFS人机验证,用于前端登录滑动验证)
  • CodePay(码支付,用户水电费充值时的在线支付)
  • QQConnect(QQ互联,用于前端QQ登录绑定)

4、生成数据表(像运行正常的Django项目一样使用指令)

python manage.py makemigrationspython manage.py migrate

5、导入初始系统设置数据

数据文件位置:/数据库/system_setting_systemsetting.sql

6、启动项目(像运行正常的Django项目一样使用指令)

python manage.py runserver 127.0.0.1:8080

系统运行截图

1. 前端-后台[ PC端 ]

Python代码阅读(第16篇):列表求差集

2. 前端-前台[ 移动端 ]

Python代码阅读(第16篇):列表求差集

Python代码阅读(第16篇):列表求差集

3. 前端-摄像头端

Python代码阅读(第16篇):列表求差集

源码文件获取

公众号后台回复: 门禁管理 就能获取

Python代码阅读(第16篇):列表求差集

Original: https://blog.51cto.com/u_10487107/5559031
Author: 周萝卜123
Title: Python+Django实现基于人脸识别的门禁管理系统【源码】

相关阅读3

Title: 【小程序项目开发-- 京东商城】uni-app之分类导航区域

Python代码阅读(第16篇):列表求差集

🤵‍♂️ 个人主页: @计算机魔术师 👨‍💻 作者简介:CSDN内容合伙人,全栈领域优质创作者。

🌐 推荐一款找工作神器网站: ​​点击跳转牛客网​​ |笔试题库|面试经验|实习招聘内推|

还没有账户的小伙伴 ​​速速点击链接登录注册把!🎉🎉​

该文章收录专栏✨ 2022微信小程序京东商城实战 ✨

实现目标:

Python代码阅读(第16篇):列表求差集

一、封装uni.$showMsg()

  • 开发场景

在项目中,我们经常需要多次调取数据,而当数据请求失败之后,经常需要调用 uni.showToast({ / 配置对象 / }) 方法来提示用户。此时,可以在全局封装一个 uni.$showMsg() 方法,来简化 uni.showToast() 方法的调用。

具体的改造步骤如下: 在main.js 项目入口文件中,为​ ​uni​​​挂载一个​ ​$showMsg()​​​ 方法,​ ​$​​表示自定义挂载函数

在函数上是赋值参数用​ ​=​​​, 在showToast函数内传的是一个字典,里面赋值是​ ​:​

// 挂载 uni请求数据消息提示 方法 (默认)uni.$showMsg = function(title = '数据加载错误...', duration = 1500,icon = 'fail' ) {  uni.showToast({    title,    duration,    icon  })}

将封装好的代码 用于home页面,

onLoad() {      // 调取方法,获取轮播图数据      this.getSwiperList()    },    methods: {      async getSwiperList() {        // '/' 根目录即为在main.js的文件配置的 baseUrl         const res = await uni.$http.get('/api/public/v1/home/swiperdata')        // 数据调取失败        if (res.data.meta.status != 200) return uni.$showMsg()        // 将调用的数据 赋值        this.swiperList = res.data.message        uni.$showMsg('数据请求成功!', 'success')      }    }

二、 响应数据参考

{    "message": [        {            "image_src": "https://www.zhengzhicheng.cn/pyg/banner1.png",            "open_type": "navigate",            "goods_id": 129,            "navigator_url": "/pages/goods_detail/main?goods_id=129"        },        {            "image_src": "https://www.zhengzhicheng.cn/pyg/banner2.png",            "open_type": "navigate",            "goods_id": 395,            "navigator_url": "/pages/goods_detail/main?goods_id=395"        },        {            "image_src": "https://www.zhengzhicheng.cn/pyg/banner3.png",            "open_type": "navigate",            "goods_id": 38,            "navigator_url": "/pages/goods_detail/main?goods_id=38"        }    ],    "meta": { "msg": "获取成功", "status": 200 }}

三、获取分类导航数据

  • 在data节点定义​ ​navList​​ 数据
data() {      return {        // 轮播图数组        swiperList: [],        //分类导航数组        navList: []      };
  • 在method 定义调取数据函数​ ​getNavList()​
async getNavList(){        // 调取数据        const res =  await uni.$http.get('/api/public/v1/home/catitems')        // 如果调取失败 返回错误信息并退出        if(res.data.meta.status != 200 ) return uni.$showMsg()        // 赋值        this.navList =  res.data.message        uni.$showMsg('数据加载成功','success')      }}
  • 在生命周期函数onload调用函数​ ​getNavList()​
onLoad() {    // 调取方法,获取轮播图数据    this.getSwiperList(),    // 获取分类导航数据    this.getNavList()  },

调取成功

Python代码阅读(第16篇):列表求差集

四、分类导航UI结构

在需要循环标签的属性节点需要在前面加上 ​ ​:​​提示后面的是变量或变量表达式

3.1大坑勿踩!!!

  • 大坑一:使用 vue-for 动态循环轮播图数组,循环动态绑定需要标签属性节点前都要加上​ ​:​​​(​ ​:​​​是​ ​v-bind:​​的缩写,即动态绑定数据,后面的是变量或者变量表达式,如果没有冒号的则为字符串,此时循环无法正常显示效果、)
  • 大坑二:在UI渲染 template模板一定需要一个 标签 view 将全部内容包裹起来,不然会报如下错误:​ &#x200B; Templates should only be responsible for mapping the state to the UI. Avoid placing tags with side-effects in your templates, such as <style>, as they will not be parsed.​</code>​</li><li>这是因为在模板中必须要有一个<strong>根节点</strong>,以这个根节点作为入口,递归遍历各个<strong>树叶</strong>(子标签)</li><li><p><img src="https://s2.51cto.com/images/blog/202208/29223321_630cce31dcddf98433.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184" title="在这里插入图片描述"></p></li></ul><p></p><div><div><div><pre><span><!--</span> <span>模板</span> <span>--></span><br><span><</span><span>template</span><span>></span><br> <span><</span><span>view</span><span>></span><br> <span><!--</span> <span>渲染轮播图UI结构</span> <span>--></span><br> <span><</span><span>swiper</span> :<span>indicator</span><span>-</span><span>dots</span><span>=</span><span>"true"</span> :<span>autoplay</span><span>=</span><span>"true"</span> :<span>interval</span><span>=</span><span>"3000"</span> :<span>duration</span><span>=</span><span>"1000"</span> :<span>circular</span><span>=</span><span>"true"</span><span>></span><br> <span><!--</span> <span>类似python</span> <span>for</span> <span>i</span>,<span>j</span> <span>in</span> <span>object</span> <span>得到对应项目i以及索引j</span> <span>--></span><br> <span><</span><span>swiper</span><span>-</span><span>item</span> <span>v</span><span>-</span><span>for</span><span>=</span><span>"(item,i) in swiperList"</span> :<span>key</span><span>=</span><span>"i"</span><span>></span><br> <span><</span><span>navigator</span> <span>class</span><span>=</span><span>"swiper-item"</span> :<span>url</span><span>=</span><span>"'/subpackages/goods_detail/goods_detail?good_id=' + item.goods_id"</span><span>></span><br> <span><</span><span>image</span> :<span>src</span><span>=</span><span>"item.image_src"</span><span>><!--</span--><span>image</span><span>></span><br> <span><!--</span--><span>navigator</span><span>></span><br> <span><!--</span--><span>swiper</span><span>-</span><span>item</span><span>></span><br> <span><!--</span--><span>swiper</span><span>></span><br> <br> <span><</span><span>view</span> <span>class</span><span>=</span><span>"nav_list"</span><span>></span><br> <span><</span><span>view</span> <span>class</span><span>=</span><span>"nav_item"</span> <span>v</span><span>-</span><span>for</span><span>=</span><span>"(item,index) in navList"</span> :<span>key</span><span>=</span><span>"index"</span><span>></span><br> <span><</span><span>image</span> :<span>src</span><span>=</span><span>"item.image_src"</span> <span>class</span><span>=</span><span>"nav_image"</span><span>><!--</span--><span>image</span><span>></span><br> <span><!--</span--><span>view</span><span>></span><br> <span><!--</span--><span>view</span><span>></span><br> <br> <span><!--</span--><span>view</span><span>></span><br><span><!--</span--><span>template</span><span>></span><br><br><br><span><!--</span> <span>样式</span> <span>--></span><br> <span><</span><span>style</span> <span>lang</span><span>=</span><span>"scss"</span><span>></span><br> .<span>nav_list</span> {<br> <span>display</span>: <span>flex</span>;<br> }<br> .<span>nav_item</span>{<br> <span>display</span>: <span>flex</span>;<br> <span>width</span>: <span>25</span><span>%</span>;<br> <span>height</span>: <span>200rpx</span>;<br> <span>justify</span><span>-</span><span>content</span>: <span>center</span>;<br> <span>align</span><span>-</span><span>items</span>: <span>center</span>;<br> }<br> <br> .<span>nav_image</span> {<br> <span>width</span>: <span>150rpx</span>;<br> <span>height</span>:<span>150rpx</span>;<br> }<br> <span><!--</span--><span>style</span><span>></span></pre></div></div></div><p></p><p>开发中可将页面复制到分栏,进行样式与结构开发</p><p><img src="https://s2.51cto.com/images/blog/202208/29223321_630cce31dccf744548.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184" title="在这里插入图片描述"></p><blockquote><p>效果:</p><p><img src="https://s2.51cto.com/images/blog/202208/29223321_630cce31e0af855820.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=,x-oss-process=image/resize,m_fixed,w_1184" title="在这里插入图片描述"></p></blockquote><h2 id="h5">五、点击分类选项跳转到分类页面</h2><p><strong>前情提要:</strong></p><blockquote><p>监听DOM(document object model)事件在vue中使用​<code>​v-on:​</code>​​, 而在小程序开发工具中监听事件则是 ​<code>​bind['状态']​</code>​​ ,如:​<code>​bindtap​</code>​​,但是由于绑定事件​<code>​v-on:​</code>​​经常需要被使用,所以使用​<code>​@​</code>​​作为​<code>​v-on:​</code>​​的缩写(前文提到的​<code>​v-bind:​</code>​​也是一样​<code>​:​</code>​​缩小,这是动态渲染数据,在小程序开发工具则是以​<code>​mustache​</code>​​语法​<code>​{{}}​</code>​渲染数据的</p></blockquote><p>由于需要对其<strong>选项判断是否为分类选项</strong>,所以<strong>不能简单的讲view改为navigator</strong>,需要监听点击事件,做更复杂的操作。</p><p></p><div><div><div><pre><span>//方法</span><br> <span>methods</span>: {<br> <span>// 分类导航-- 分类</span><br> <span>navClickHandelr</span>(<span>item</span>){<br> <span>if</span> (<span>item</span>.<span>name</span> <span>===</span> <span>'分类'</span>) {<br> <span>uni</span>.<span>switchTab</span>({<br> <span>url</span>: <span>"/pages/cate/cate"</span><br> })<br> }<br> },<br><br><span><!--</span><span>UI结构</span><span>--!></span><br> <span><</span><span>view</span> <span>class</span><span>=</span><span>"nav_list"</span><span>></span><br> <span><!--</span><span>传参item</span><span>--!></span><br> <span><</span><span>view</span> <span>class</span><span>=</span><span>"nav_item"</span> <span>v</span><span>-</span><span>for</span><span>=</span><span>"(item,index) in navList"</span> :<span>key</span><span>=</span><span>"index"</span> <span>v</span><span>-</span><span>on</span>:<span>click</span><span>=</span><span>"navClickHandelr(item)"</span><span>></span><br> <span><</span><span>image</span> :<span>src</span><span>=</span><span>"item.image_src"</span> <span>class</span><span>=</span><span>"nav_image"</span><span>><!--</span--><span>image</span><span>></span><br> <span><!--</span--><span>view</span><span>></span><br> <span><!--</span--><span>view</span><span>></span></pre></div></div></div><p></p><blockquote><p>效果:</p><p><img src="https://s2.51cto.com/images/blog/202208/29223322_630cce3237b6d46225.gif" title="在这里插入图片描述"></p></blockquote><p>成功实现!🥳</p><div><div><div><pre>✨谢谢你的阅读,您的点赞和收藏就是我创造的最大动力!✨</pre></div></div></div></style>

Original: https://blog.51cto.com/u_15691039/5631450
Author: 计算机魔术师
Title: 【小程序项目开发-- 京东商城】uni-app之分类导航区域