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 相关文章推荐
Python3里的super()和__class__使用介绍
Apr 23 Python
Python函数返回值实例分析
Jun 08 Python
使用python加密自己的密码
Aug 04 Python
python django 访问静态文件出现404或500错误
Jan 20 Python
python删除某个字符
Mar 19 Python
浅谈Django中的数据库模型类-models.py(一对一的关系)
May 30 Python
Python3多进程 multiprocessing 模块实例详解
Jun 11 Python
Python中变量的输入输出实例代码详解
Jul 28 Python
Python3 requests文件下载 期间显示文件信息和下载进度代码实例
Aug 16 Python
解决tensorflow读取本地MNITS_data失败的原因
Jun 22 Python
GitHub上值得推荐的8个python 项目
Oct 30 Python
Python&Matlab实现灰狼优化算法的示例代码
Mar 21 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数组函数序列之array_intersect() 返回两个或多个数组的交集数组
2011/11/10 PHP
PHP多线程批量采集下载美女图片的实现代码(续)
2013/06/03 PHP
php实现删除指定目录下相关文件的方法
2014/10/20 PHP
PHP检测数据类型的几种方法(总结)
2017/03/04 PHP
JS+PHP实现用户输入数字后显示最大的值及所在位置
2017/06/19 PHP
php插件Xajax使用方法详解
2017/08/31 PHP
jquery创建并行对象或者合并对象的实现代码
2012/10/10 Javascript
javascript之Partial Application学习
2013/01/10 Javascript
将json当数据库一样操作的javascript lib
2013/10/28 Javascript
js触发onchange事件的方法说明
2014/03/08 Javascript
jquery自动填充勾选框即把勾选框打上true
2014/03/24 Javascript
Extjs grid添加一个图片状态或者按钮的方法
2014/04/03 Javascript
JS 新增Cookie 取cookie值 删除cookie 举例详解
2014/10/10 Javascript
jQuery中trigger()与bind()用法分析
2015/12/18 Javascript
easyui 中的datagrid跨页勾选问题的实现方法
2017/01/18 Javascript
jQuery第一次运行页面默认触发点击事件的实例
2018/01/10 jQuery
vue自定义指令directive实例详解
2018/01/17 Javascript
详解vuex结合localstorage动态监听storage的变化
2018/05/03 Javascript
解决vue页面渲染但dom没渲染的操作
2020/07/27 Javascript
[01:10]DOTA2亚洲邀请赛 征战号角响彻全场
2015/01/06 DOTA
详解Python核心对象类型字符串
2018/02/11 Python
python实现对任意大小图片均匀切割的示例
2018/12/05 Python
python爬虫 线程池创建并获取文件代码实例
2019/09/28 Python
Django框架ORM数据库操作实例详解
2019/11/07 Python
Python select及selectors模块概念用法详解
2020/06/22 Python
HTML5 manifest离线缓存的示例代码
2018/08/08 HTML / CSS
美体小铺英国官网:The Body Shop英国
2017/01/24 全球购物
西班牙土拨鼠床垫公司,感觉在云端:Marmota
2019/03/18 全球购物
Linden Leaves官网:新西兰纯净护肤品
2020/12/20 全球购物
中学运动会广播稿
2014/01/19 职场文书
酒店端午节活动方案
2014/08/26 职场文书
信仰心得体会
2014/09/05 职场文书
四风对照检查材料思想汇报
2014/09/20 职场文书
《微笑着面对生活》优秀演讲稿范文
2014/09/23 职场文书
2014年标准化工作总结
2014/12/17 职场文书
python 如何执行控制台命令与操作剪切板
2021/05/20 Python