zl程序教程

您现在的位置是:首页 >  后端

当前栏目

Python中Collection的使用小技巧

Python 使用 技巧 collection
2023-06-13 09:15:43 时间

本文所述实例来自独立软件开发者AlexMarandon,在他的博客中曾介绍了数个关于PythonCollection的实用小技巧,在此与大家分享。供大家学习借鉴之用。具体如下:

1.判断一个list是否为空

传统的方式:

iflen(mylist):
#Dosomethingwithmylist
else:
#Thelistisempty

由于一个空list本身等同于False,所以可以直接:

ifmylist:
#Dosomethingwithmylist
else:
#Thelistisempty

2.遍历list的同时获取索引

传统的方式:

i=0
forelementinmylist:
#Dosomethingwithiandelement
i+=1

这样更简洁些:

fori,elementinenumerate(mylist):
#Dosomethingwithiandelement
pass

3.list排序

在包含某元素的列表中依据某个属性排序是一个很常见的操作。例如这里我们先创建一个包含person的list:

classPerson(object):
def__init__(self,age):
self.age=age

persons=[Person(age)foragein(14,78,42)]

传统的方式是:

defget_sort_key(element):
returnelement.age

forelementinsorted(persons,key=get_sort_key):
print"Age:",element.age

更加简洁、可读性更好的方法是使用Python标准库中的operator模块:

fromoperatorimportattrgetter

forelementinsorted(persons,key=attrgetter("age")):
print"Age:",element.age

attrgetter方法优先返回读取的属性值作为参数传递给sorted方法。operator模块还包括itemgetter和methodcaller方法,作用如其字面含义。

4.在Dictionary中元素分组

和上面类似,先创建Persons:

classPerson(object):
def__init__(self,age):
self.age=age

persons=[Person(age)foragein(78,14,78,42,14)]

如果现在我们要按照年龄分组的话,一种方法是使用in操作符:

persons_by_age={}

forpersoninpersons:
age=person.age
ifageinpersons_by_age:
persons_by_age[age].append(person)
else:
persons_by_age[age]=[person]

assertlen(persons_by_age[78])==2

相比较之下,使用collections模块中defaultdict方法的途径可读性更好:

fromcollectionsimportdefaultdict

persons_by_age=defaultdict(list)

forpersoninpersons:
persons_by_age[person.age].append(person)

defaultdict将会利用接受的参数为每个不存在的key创建对应的值,这里我们传递的是list,所以它将为每个key创建一个list类型的值。

本文示例仅为程序框架,具体功能还需要读者根据自身应用环境加以完善。希望本文所述实例对大家学习Python能起到一定的帮助作用。