时间:2021-05-22
摘要
相同属性不相邻问题
需求:有两个list,分别为list1和list2。list1中有n个对象,每个对象有5个属性,其中一个属性是tid,要求list1按tid排序,相邻的对象的tid不能重复,m为不重复的tid数量,m不确定。list2存放的是所有可能出现的tid的情况。
神奇的local函数
python语言很好的帮我们解决了这个问题:利用locals内置函数动态创建变量。
locals函数在这里的作用:
demo
def apart_program_by_task(list1,list2): list_all_pro = [] #动态创建m个list,命名为'list'+str(tidm) for i in list2: locals()['list'+str(i)] = [] #拿到每个对象,获取其tid的值,通过拼接变量名访问对应的list,并把该对象加入该list for i in list1: locals()['list'+str(i.tid)].append(i) #循环访问m个list的每个list的头元素,并删除,然后加入list_all_pro while 1: flag = False for i in list2: try: pro = locals()['lst'+str(i)].pop() list_all_pro.append(pro) flag = True except: pass if flag == False: break return list_all_pro这个demo中,我们可以很灵活的根据list2的长度动态创建len(list2)个list,然后根据拼接变量名访问每个list,从而做到按tid归类。
在回收所有的list时,我们也是通过拼接变量名挨个访问每个list一次,取到头元素加入新的list,来保证新的list中的相邻对象的tid不相同。
更多
为什么locals函数可以动态创建和访问变量,这里我们必须先介绍python的命名空间。
python解释器启动 ->创建内建命名空间 -> 加载模块 -> 创建全局命名空间 ->函数被调用 ->创建局部命名空间
而locals的作用,就是以字典的形式,返回当前函数内变量名和变量值,比如:
def func(a = 1): b = 2 print(locals()) return a+bfunc() # {'b': 2, 'a': 1}这就可以解释动态访问变量的原理了,就像访问字典一样,比如我们要根据key访问字典的值,只需要
dict = {'b': 2, 'a': 1}print(dict["b"])所以,locals()[变量名] 即可动态访问当前函数内的变量名,而locals()[“list101”] = [] 也可以动态创建数组,等价于 list101 = []
但是locals只能访问所在函数内部的变量,且不可修改,要访问全局变量or修改,则需要使用globals函数。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。如果你想了解更多相关内容请查看下面相关链接
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了python检测某个变量是否有定义的方法。分享给大家供大家参考。具体如下:第一种方法使用内置函数locals():'testvar'inlocal
本文实例讲述了Python基础教程之内置函数locals()和globals()用法。分享给大家供大家参考,具体如下:1.这两个函数主要提供,基于字典的访问局部
Python两个内置函数——locals和globals这两个函数主要提供,基于字典的访问局部和全局变量的方式。在理解这两个函数时,首先来理解一下python中
python判断一个变量是否已经设置的方法:可以使用locals()函数来进行判断。locals()函数会以字典类型返回当前位置的全部局部变量,具体使用方法如:
本文实例讲述了python内置函数sorted()用法。分享给大家供大家参考,具体如下:列表对象提供了sort()方法支持原地排序,而内置函数sorted()不