>>> tuple1 =(1,2,3,4)>>> list5 =[i*i for i in tuple1]>>>print(list5)[1,4,9,16]>>> list6 =(i*i for i in tuple1)>>>print(list6)<generator object<genexpr> at 0x03559E10>
统计字符串列表中每个字符串的长度:
>>> words =['abc','defg','I love python','Django']>>> len_list =[len(word)for word in words ]>>>print(len_list)[3,4,13,6]
利于列表表达式求两个列表的交集:
>>> a =[3,5,6,8]>>> b =[5,6]>>> a_b =[ i for i in a if i in b]>>>print(a_b)[5,6]
打印出 100 以内所有十位数比个位数大 1 位的数字:
>>> num =[ n1*10+n2 for n1 inrange(0,10)for n2 inrange(0,10)if n1 == n2+1]>>>print(num)[10,21,32,43,54,65,76,87,98]
>>> flist =[lambda x:x*x for x inrange(1,3)]>>>print(flist)[<function <listcomp>.<lambda> at 0x03ADE2B8>,<function <listcomp>.<lambda> at 0x03ADE300>]>>> flist[0]<function <listcomp>.<lambda> at 0x03ADE2B8>>>> flist[0](2)4
实际上 zip 方法支持所有可迭代对象(字符串、列表、元祖、字典),而不仅仅是列表。利用这个特性,可以很容易创建各种字典,包括很复杂的字典。
来看 2 个经典例子,如下所示,注意 zip 对象支持直接遍历,不需要先转成 list 或 dict:
>>> l1 =[1,2,3]>>> str1 ="abc">>>print(dict(zip(l1, str1))){1:'a',2:'b',3:'c'}>>> name =["John","Jim","Lucy"]>>> year =[1983,1985,1995]>>> birth_year =dict(zip(name, year))>>>print(birth_year){'John':1983,'Jim':1985,'Lucy':1995}>>>for name, year inzip(name, year):print("{} - {}".format(name, year))
John -1983
Jim -1985
Lucy -1995
利用 zip(*some_list) 方法可以实现元组列表的反向解压,如下所示:
>>> l1 =[("John",1995),("Lucy",2000),("Max",1985)]>>> name, year =zip(*l1)>>>print(name)('John','Lucy','Max')>>>print(year)(1995,2000,1985)>>> l2 =dict(l1)>>>print(l2){'John':1995,'Lucy':2000,'Max':1985}>>> name1, year1 =zip(*l2)
Traceback (most recent call last):
File "<pyshell#6>", line 1,in<module>
name1, year1 =zip(*l2)
ValueError: too many values to unpack (expected 2)
注意 unzip 只支持元组列表,不支持 dict 直接解压。
四、enumerate() 函数
enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,常见用于 for 循环。一般只有需要同时用到索引 index 和 value 值的时候才用 enumerate 方法。
直接使用 enumerate 方法生成是个 enumerate 对象,可以遍历。
>>> name =["John","Lucy","Mary"]>>> name1 =enumerate(name)>>>print(name1)<enumerateobject at 0x030D0FA8>>>>for index, name inenumerate(name):print("{}-{}".format(index, name))0- John
1- Lucy
2- Mary
>>>import math
>>>defisPrime(n):if n <=1:returnFalseelif n ==2:returnTrueelse:for i inrange(2,int(math.sqrt(n))+1):if n%i ==0:returnFalsereturnTrue>>> l1 =[-1,0,2,3,6,7,8]>>> l2 =list(filter(isPrime, l1))>>>print(l2)[2,3,7]