Python实现比较两个列表(list)范围


Posted in Python onJune 12, 2015

有一道题: 比较两个列表范围,如果包含的话,返回TRUE,否则FALSE。 详细题目如下:

Create a function, this function receives two lists as parameters, each list indicates a scope of numbers, the function judges whether list2 is included in list1.

 Function signature:
    differ_scope(list1, list2)

 Parameters:
    list1, list2    - list1 and list2 are constructed with strings,
                      each string indicates a number or a scope of
                      numbers. The number or scope are randomly, can
                      be overlapped. All numbers are positive.

                        E.g.
                            ['23', '44-67', '12', '3', '20-90']
 Return Values:
    True            - if all scopes and numbers indicated by list2 are included in list1.
    False           - if any scope or number in list2 is out of the range in list1.
 Examples:
    case1    - list1 = ['23', '44-67', '12', '3', '20-90']
               list2 = ['22-34', '33', 45', '60-61']
               differ_scope(list1, list2) == True
    case2    - list1 = ['23', '44-67', '12', '3', '20-90']
               list2 = ['22-34', '33', 45', '60-61', '100']
               differ_scope(list1, list2) == False

贴上自己写的代码如下:(备注: python 2.7.6)

def differ_scope(list1, list2): 
  print "list1:" + str(list1) 
  print "list2:" + str(list2) 
  #设置临时存放列表 
  list1_not_ = [] #用于存放列表1正常的数字值,当然要用int()来转换 
  list1_yes_ = [] #用于存放列表1中范围值如 44-67 
  list1_final = [] #用于存放列表1中最终范围值 如:[1,2,3,4,5,6,7,8,9,10] 
  temp1    = [] 
   
  list2_not_ = []  #用于存放列表2正常的数字值,当然要用int()来转换 
  list2_yes_ = []  #用于存放列表2中范围值如 44-67 
  list2_final= []  #用于存放列表2中最终范围值 如:[1,2,3,4,5,6,7,8,9,10] 
  temp2   = [] 
 
  temp    = []  #用于存放列表1,与列表2比较后的列表,从而判断结果为True还是False. 
   
  #对列表1进行处理 
  for i in range(len(list1)): #用FOR循环对列表1进行遍历 
    tag = 0 
    if list1[i].find('-')>0:#对含范围的数字进行处理,放到list_yes_列表中  
      strlist = list1[i].split('-') 
    list1_yes_ = range(int(strlist[0]),int(strlist[1])+1)#让其生成一个范围列表 
    for each in list1_yes_:     #FOR循环遍历所有符合条件的. 
        [temp1.append(each)] 
    else:           #对列表1中正常的数字进行处理,放到list_not_列表中 
      list1_not_.append(int(list1[i]))#对列表1中进行处理,放到list_yes_    
  [temp1.append(i) for i in list1_not_ if not i in temp1]#去除重复项 
  list1_final = sorted(temp1) #比较后,排序,并放到list1_final列表中 
  print "list1_final value is:" + str(list1_final)#打印排序后最终list1_final列表 
 
   
  #对列表2进行处理 
  for i in range(len(list2)): 
    if list2[i].find('-')>0: 
      strlist = list2[i].split('-') 
    list2_yes_ = range(int(strlist[0]),int(strlist[1])+1) 
    for each in list2_yes_: 
        [temp2.append(each)] 
      print "Temp2:" + str(temp2) 
    else: 
      list2_not_.append(int(list2[i])) 
  [temp2.append(i) for i in list2_not_ if not i in temp2] 
  list2_final = sorted(temp2) 
  print "list2_final value is:" + str(list2_final) 
 
  #对两个列表进行比较,得出最终比较结果. 
  [temp.append(i) for i in list2_final if not i in list1_final]#比较两个列表差值. 
  print "In list2 but not in list1:%s" % (temp)#打印出列表1与列表2的差值 
  if len(temp)>=1 : 
    print "The result is: False" 
  else: 
    print "The result is: True" 
 
if __name__ == '__main__': 
  list1 = ['23', '44-67', '12', '3','90-100'] 
  list2 = ['22-34', '33', '45'] 
  differ_scope(list1,list2)

总结:
1. 这道题关键是想法,如果整成坐标的方式来比较,会很麻烦。
2. 列表转成范围后,如果消除重复项,同样是里面的关键所在。
3. 其次是对列表遍历的操作,同样挺重要。

Python 相关文章推荐
python操作xml文件示例
Apr 07 Python
Python实现读取目录所有文件的文件名并保存到txt文件代码
Nov 22 Python
Python中的一些陷阱与技巧小结
Jul 10 Python
使用PyInstaller将Python程序文件转换为可执行程序文件
Jul 08 Python
Python使用django搭建web开发环境
Jun 09 Python
Python使用ffmpy将amr格式的音频转化为mp3格式的例子
Aug 08 Python
Python urlencode和unquote函数使用实例解析
Mar 31 Python
python 实现两个线程交替执行
May 02 Python
浅谈Python中的字符串
Jun 10 Python
Flask缓存静态文件的具体方法
Aug 02 Python
使用pandas实现筛选出指定列值所对应的行
Dec 13 Python
vue.js刷新当前页面的实例讲解
Dec 29 Python
在Linux系统上安装Python的Scrapy框架的教程
Jun 11 #Python
Python语言实现机器学习的K-近邻算法
Jun 11 #Python
在Linux下使用Python的matplotlib绘制数据图的教程
Jun 11 #Python
python中的代码编码格式转换问题
Jun 10 #Python
python实现数独算法实例
Jun 09 #Python
python中的全局变量用法分析
Jun 09 #Python
python简单实现计算过期时间的方法
Jun 09 #Python
You might like
php GUID生成函数和类
2014/03/10 PHP
PHP获取MySql新增记录ID值的3种方法
2014/06/24 PHP
php include类文件超时问题处理
2015/02/06 PHP
Smarty模板简单配置与使用方法示例
2016/05/23 PHP
Javascript - HTML的request类
2006/07/15 Javascript
js报错 Object doesn't support this property or method的原因分析
2011/03/31 Javascript
js识别uc浏览器的代码
2015/11/06 Javascript
基于JavaScript代码实现pc与手机之间的跳转
2015/12/23 Javascript
js下将金额数字每三位一逗号分隔
2016/02/19 Javascript
webpack常用配置项配置文件介绍
2016/11/07 Javascript
微信小程序 表单Form实例详解(附源码)
2016/12/22 Javascript
jquery实现简单实用的轮播器
2017/05/23 jQuery
JavaScript数据类型和变量_动力节点Java学院整理
2017/06/26 Javascript
修改Nodejs内置的npm默认配置路径方法
2018/05/13 NodeJs
Vue中props的使用详解
2018/06/15 Javascript
详解Vue+axios+Node+express实现文件上传(用户头像上传)
2018/08/10 Javascript
Node.js中的不安全跳转如何防御详解
2018/10/21 Javascript
jQuery实现合并表格单元格中相同行操作示例
2019/01/28 jQuery
详解vue-element Tree树形控件填坑路
2019/03/26 Javascript
nodejs+express最简易的连接数据库的方法
2020/12/23 NodeJs
python二叉树的实现实例
2013/11/21 Python
Python 实现异步调用函数的示例讲解
2018/10/14 Python
详解python持久化文件读写
2019/04/06 Python
使用GitHub和Python实现持续部署的方法
2019/05/09 Python
HTML5如何使用SVG的方法示例
2019/01/11 HTML / CSS
MADE荷兰:提供原创设计师家具
2018/04/03 全球购物
碧欧泉法国官网:Biotherm法国
2019/10/23 全球购物
String是最基本的数据类型吗?
2013/06/13 面试题
本科毕业生自我鉴定
2013/11/02 职场文书
大学毕业后的十年规划
2014/01/07 职场文书
开业典礼主持词
2014/03/21 职场文书
2015年简历自我评价范文
2015/03/11 职场文书
教师评职称工作总结2015
2015/04/20 职场文书
2016年教师党员公开承诺书
2016/03/24 职场文书
原来实习报告是这样写的呀!
2019/07/03 职场文书
分布式架构Redis中有哪些数据结构及底层实现原理
2022/03/13 Redis