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中的列表知识点汇总
Apr 14 Python
Python RuntimeError: thread.__init__() not called解决方法
Apr 28 Python
Python matplotlib绘图可视化知识点整理(小结)
Mar 16 Python
matplotlib实现热成像图colorbar和极坐标图的方法
Dec 13 Python
浅谈Python的条件判断语句if/else语句
Mar 21 Python
Python3.5基础之变量、数据结构、条件和循环语句、break与continue语句实例详解
Apr 26 Python
python基于递归解决背包问题详解
Jul 03 Python
基于spring boot 日志(logback)报错的解决方式
Feb 20 Python
python读写文件write和flush的实现方式
Feb 21 Python
Django serializer优化类视图的实现示例
Jul 16 Python
Python钉钉报警及Zabbix集成钉钉报警的示例代码
Aug 17 Python
2021年值得向Python开发者推荐的VS Code扩展插件
Jan 25 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
fleaphp常用方法分页之Pager使用方法
2011/04/23 PHP
php 字符串中的\n换行符无效、不能换行的解决方法
2014/04/02 PHP
对PHP语言认识上需要避免的10大误区
2014/06/12 PHP
PHP实现基于栈的后缀表达式求值功能
2017/11/10 PHP
PHP判断函数是否被定义的方法
2019/06/21 PHP
HTTP状态代码以及定义(解释)
2007/02/02 Javascript
JS 有名函数表达式全面解析
2010/03/19 Javascript
js实现兼容IE6与IE7的DIV高度
2010/05/13 Javascript
script不刷新页面的联动前后代码
2013/09/18 Javascript
7个JS基础知识总结
2014/03/05 Javascript
jquery的clone方法应用于textarea和select的bug修复
2014/06/26 Javascript
JavaScript设计模式之观察者模式(发布者-订阅者模式)
2014/09/24 Javascript
js实现多选项切换导航菜单的方法
2015/02/06 Javascript
使用jquery清空、复位整个输入域
2015/04/02 Javascript
easyui Draggable组件实现拖动效果
2015/08/19 Javascript
Bootstrap文件上传组件之bootstrap fileinput
2016/11/25 Javascript
无阻塞加载js,防止因js加载不了影响页面显示的问题
2016/12/18 Javascript
JS通过调用微信API实现微信支付功能的方法示例
2017/06/29 Javascript
JavaScript模拟文件拖选框样式v1.0的实例
2017/08/04 Javascript
详解vue + vuex + directives实现权限按钮的思路
2017/10/24 Javascript
详解最新vue-cli 2.9.1的webpack存在问题
2017/12/16 Javascript
vue.js 子组件无法获取父组件store值的解决方式
2019/11/08 Javascript
React实现阿里云OSS上传文件的示例
2020/08/10 Javascript
python 测试实现方法
2008/12/24 Python
Python编程中归并排序算法的实现步骤详解
2016/05/04 Python
单链表反转python实现代码示例
2018/02/08 Python
python实现人民币大写转换
2018/06/20 Python
python KNN算法实现鸢尾花数据集分类
2019/10/24 Python
浅谈python中统计计数的几种方法和Counter详解
2019/11/07 Python
python入门之井字棋小游戏
2020/03/05 Python
Django实现随机图形验证码的示例
2020/10/15 Python
CSS3 box-shadow属性实例详解
2020/06/19 HTML / CSS
联想西班牙官网:Lenovo西班牙
2018/08/28 全球购物
四风问题个人剖析材料
2014/10/07 职场文书
民主评议党员自我鉴定
2014/10/21 职场文书
党员干部廉洁自律承诺书
2015/04/28 职场文书