列表,元组,字典
1.列表list
。
插入和删除,a.insert(1,'A')
,位置索引1处插入元素’A’;a.pop(i)
删除索引位置为i
的元素,i 缺省时删除列表末尾的元素。
同时迭代索引和元素:for i, va in enumerate(list1):
。
列表生成式:[x*x for x in range(11)]
,把要生成的列表元素放在最前边,后边跟for循环即可。两层[m + n for m in 'ABC' for n in 'XYZ']
输出结果为['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
。带判断的列表生成式:[x * x for x in range(1, 11) if x % 2 == 0]
,只保留偶数的平方。
2.元组tuple
,一种有序列表,同 list 一样访问某个元素。
初始化时,空tuple
写成a = ()
;当只有一个元素时,也需要加逗号,以防引起歧义,b = (1,)
。
一旦初始化,不能修改,更加安全。但是当它的元素是列表时,列表是可以改变的(即tuple
中的一个指针指向了‘可变’的列表)。
3.字典dict
,全程dictionary,在其他语言中成为map
。
具有极快的查找速度,但需要占用大量的内存,内存浪费较多(原理:通过key
计算value
的位置,称为hash
算法)。
判断dict中key
是否存在有两种方式:'a' in dict
(不存在时返回false);dict.get('a')
(不存在时返回None
,也可指定返回值如dict.get('a',-1)
,此时不存在时返回-1
)。
删除key:dict.pop(key)
。
作为key的对象是不能变的,字符串、整数等都可以放心地作为key,而list不能作key。当多次对一个key放入value,后面的值会把前面的值冲掉。
对于dict的迭代,迭代Key是for k in dict
,迭代value是for v in dict.values()
,同时迭代key和value为for k,v in dict.items()
。
4.切片操作:通过下标方式访问序列中的数据,sequence[starting_index:ending_index:step]
。
首先以'abcdestr'
(字符串可以被看作为list,每个字符是一个元素,可以进行切片操作) 为例看其下标:
具体使用方法如下:
>>> s = 'abcdestr'
>>> s[:]
'abcdestr'
>>> s[::2]
'acet'
>>> s[::-1] #返回倒序序列
'rtsedcba'
4.lambda
函数:指无需定义函数名的函数。可以接收任意多个参数,并返回单个表达式的值。
lambda
函数的格式:冒号前是参数,可以有多个,用逗号隔开,冒号右边的为表达式。其实lambda返回值是一个函数的地址,也就是函数对象。
具体使用方法如下:
>>> s = lambda i,j:(i+j)/2
>>> s(3,5)
4.0
知识扩展
1.如何判断一个对象是可迭代对象(可以用for
循环迭代的对象是Iterable
对象)呢?可以通过collections模块的Iterable
类型判断。
>>> from collections import Iterable
>>> isinstance('abc', Iterable) #str是否可迭代
True
>>> isinstance([1,2,3], Iterable) #list是否可迭代
True
>>> isinstance(123, Iterable) #整数是否可迭代
False
而可以被next()
函数调用并不断返回下一个值的对象称为迭代器:Iterator
。list
,dict
,str
,tuple
等通过iter()
可以转换为迭代器。
>>>isinstance(['a','b'], Iterator)
False
>>>isinstance(iter('abc'), Iterator)
True
2.字符串小写str.lower()
;判断一个元素是不是字符串类型isinstance(x, str)
返回true
/false
。
3.赋值语句a, b = b, a
是成立的。
4.列表生成器generatorg = (x * x for x in range(10))
,通过next()
来获取下一个值。它与列表的区别是不需要列出所有元素,不需要列出的元素不会占用空间,所以它可以是无限大。
>>>g = (x * x for x in range(2))
>>>g.next()
0
>>>g.next()
1
>>>g.next() #当没有下一个元素时,抛出StopIteration的错误
>>>for n in g: #也可通过这种方式获取生成器g的元素
>>> print(n)
另一种定义generator的方法,使用关键字yield
。如果一个函数定义中包含yield
关键字,那么这个函数就不再是一个普通函数,而是一个generator
。与普通函数不同,变成generator的函数,在每次调用next()
的时候执行,遇到yield
语句返回,再次执行时从上次返回的yield语句处继续执行。
>>>def odd():
>>> print('step 1')
>>> yield 1
>>> print('step 2')
>>> yield(3)
>>> print('step 3')
>>> yield(5)
>>> o = odd() #首先需要生产一个generator对象
>>> next(o)
step 1
1
>>> next(o)
step 2
3
_参考内容:_