python学习笔记17:列表list

1. 常用操作

注: 可以通过help(list)获取list的完整知识;

常用方法

函数名 用法 说明
append lst.append(item) 列表末尾添加一个元素
extend lst.extend(lst_new) 列表末尾添加lst_new的元素
insert lst.insert(i, item) 在位置i添加元素item
pop lst.pop(i) 删除并返回位置i的元素, i默认为最后一项,也可以使用del lst[i]
sort lst.sort() 对lst进行排序, 会更改lst, 不返回lst
reverse lst.reverse() lst逆序, 会更改lst, 不返回lst
index lst.index(item) 返回lst中第一次出现item的idx
count lst.count(item) 返回lst中value==item的个数
remove lst.remove(item) 删除lst中第一个value==item的元素, 不返回值
len len(lst) 返回元素个数/lst的长度

具体使用示例

列表清空/列表赋值

>>> abc = [] #清空列表(把空列表赋值给变量):  
>>> shoplist = [‘apple’, ‘mango’, ‘carrot’, ‘banana’] # 赋值多个元素  

列表遍历

>>> for ele in shoplist:  
...     print(ele)  
>>> for i, ele in enumerate(shoplist): 遍历时同时给元素编号/获取索引值
...     print(f'{i} {ele}')

列表长度(元素个数)

>>> len(shoplist)  
4  

列表追加列表/列表合并/列表排序

>>> L1.extend(L2) # 在列表L1结尾追加列表L2中的元素;  
>>> L3 = L1 + L2  # 列表合并;  
>>> L1.sort()     # 列表排序,注意,列表本身会改变,而不是返回一个被改变的列表,因为列表是可变的。该语句返回None;sort()详细使用见第15.9节;  

获取指定idx对应的元素/获取指定元素对应的idx

>>> shoplist[0] #根据下标获取列表元素, 返回元素:  
‘apple’  
>>> 
>>> #取元素对应的index:  
>>> shoplist.index(‘apple’) #根据列表元素获取下标, 返回下标, 如果元素不存在, 则raise ValueError
0  

列表追加元素

>>> shoplist.append(‘rice’) # 给列表追加元素,返回None  
>>> shoplist  
[‘apple’, ‘mango’, ‘carrot’, ‘banana’, ‘rice’]  

指定idx添加元素

>>> shoplist.insert(2, ‘cup’) # 指定index添加元素,返回None  
>>> shoplist # cup成为idx=2的元素,原本idx>=2的元素的idx都增加1  
[‘apple’, ‘mango’, ‘cup’, ‘carrot’, ‘banana’, ‘rice’]  

指定idx删除元素

>>> ele = shoplist.pop(2) # 指定index删除元素,返回元素, 默认删除最后一项;  
>>> ele  
‘cup’  
>>> shoplist  
[‘apple’, ‘mango’, ‘carrot’, ‘banana’, ‘rice’]  
>>>  
>>> ele = shoplist.pop() #不指定idx,则删除末尾元素  
>>> ele  
‘rice’  
>>> shoplist  
[‘apple’, ‘mango’, ‘carrot’, ‘banana’]     

指定value删除元素

>>> lst = list('hello world')  
>>> lst  
['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']  
>>> lst.remove('o')  # 删除第一个出现的'o'  
>>> lst  
['h', 'e', 'l', 'l', ' ', 'w', 'o', 'r', 'l', 'd']  

计算某元素出现的次数

>>> shoplist.count(‘carrot’) # 返回int,如果元素不存在,则返回0;  
1  

遍历list时对循环变量赋值不会改变原本的list.

>>> a = [0, 1, 2, 3, 4]  
>>> for e in a:  
...     e = 5 # 直接给元素变量赋值不会改变list本身(与Perl有区别)  
...  
>>> print(a) # [0, 1, 2, 3, 4],遍历list元素并对元素赋值不会改变list。  

2. 列表生成式

列表生成式用来简洁在创建一个列表或从一个列表导出另一个列表;

>>> list(range(1,11))                  # 生成从1到10组成的列表
>>> [x**2 for x in range(1,11)]        # 生成从1到10的平方组成的列表
>>> [x**2 for x in range(1,11) if x%2==0] # 生成从1到10的中的偶数的平方组成的列表;  
>>> [m+n for m in ‘ABC’ for n in ‘XYZ’]# 两层循环,生成ABC与XYZ字符的排列
>>> [d for d in os.listdir(‘.’)]       # 列表当前目录下的所有文件和文件夹
>>> [k+‘=’+v for k,v in d.items()]     # for循环使用两个变量,把k和v用等号连接
>>> [s.lower() for s in L]             # 把list中的字符串改成小写;

3. 生成器

3.1. 使用类似列表生成式的for循环实现generator

列表容量有限,一边循环一边计算生成列表,这种方式叫:generator;

>>> L = [x**2 for x in range(10)] # 列表生成式;打印L可以打印出所有元素;  
>>> g = (x**2 for x in range(10)) # generator;与列表生成式的区别是小括号;  
>>> g #打印g会得到,这个地方保存的是算法,而不是实际的列表;  
<generator object <genexpr> at 0x1022ef630>  

多次使用next(g)可以依次取出值,但比较傻;
generater是可迭代对象,所以可以使用循环:

>>> for n in g:
...     print(n, end=’ ’)
...
0 1 4 9 16 25 36 49 64 81

g循环过一次后,再对g做循操作,g里面就没有内容了;

3.2. 使用函数实现generator: yield

如果一个函数定义中包含yield关键字,则函数就不再是一个普通函数,而是一个generator.
斐波拉契数列:

>>> def fib(max):  
...     a, b = 0, 1  
...     for i in range(max):  
...         yield b # 每次调用next或每次循环,执行到这就会暂停,返回这个值;  
...         a, b = b, a+b  
...     return ‘Done’ # generator的return值需要通过捕获StopIteration拿到;  
...  
>>> f = fib(6)  
>>> f  
<generator object fib at ox2ac****>  
>>> for i in f:  
...     print(i, end=‘ ’)  
...  
1 1 2 3 5 8  

4. 迭代器

可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator;

生成器都是Iterator对象,但list、dict、str虽然Iterable,但不是Iterator;

import collections  

isinstance(100, collections.Iterable) # False,整数不是可迭代的  
 
isinstance([], collections.Iterable)  # True , 列表是可迭代的;  
isinstance([], collections.Iterator)  # False,列表不是迭代器;  
  
_gen = (x for x in range(10))  
isinstance(_gen, collections.Iterable) # True,generator是可迭代的;  
isinstance(_gen, collections.Iterator) # True,generator是迭代器;  

使用iter()函数,可以把list/dict/str变成Iterator;

isinstance(iter([]), collections.Iterator) # True  
posted @ 2020-07-03 17:42  编程驴子  阅读(180)  评论(0编辑  收藏  举报