列表list
需要注意的是:建议不要将变量声明成str,list,tuple,dict。因为这四个是关键字,每个类型的标识,为避免错误,建议不要作为变量名
列表的声明方式
>>> names=['希望','hreo',666,888,'abc'] >>> print(names) ['希望', 'hreo', 666, 888, 'abc'] >>>
列表中可以添加任意类型的数据。和str类型一样,list也支持切片,因为其本身就有索引
>>> names[0] '希望' >>> names[2:] [666, 888, 'abc'] >>> names[:] ['希望', 'hreo', 666, 888, 'abc'] >>> names + ['888',"流浪街头"] #这里的添加不会将结果反映到源变量中 ['希望', 'hreo', 666, 888, 'abc', '888', '流浪街头'] >>>
相对于str类型而言,list类型是可变的,可以为某个索引对应的值做更改
>>> names[0]=['name','name','length'] >>> names [['name', 'name', 'length'], 'h_change', '6_change', '8_change', 888, 'abc'] >>>
列表中含有列表,可以这样来获得
>>> names [['name', 'name', 'length'], 'h_change', '6_change', '8_change', 888, 'abc'] >>> names[0][1] #将获得索引为0的列表里索引为1的元素 'name' >>>
使用len()可以输出list和元素个数
>>> len(names)
6
list的常用方法
添加元素: append(参数) 向末尾追加 extend(参数) 参数需是列表,合并列表,将列表追加到尾部 insert(位置,要添加的参数) 插入元素 删除元素 remove(元素名) 删除列表没有的元素会报错 del关键字 del 列表名将整个列表删除 del name[0]将删除列表name第一个元素 pop(index)通过索引下标删除某个元素并返回该元素
以上方法对list类型数据操作都会直接影响到元数据类型的值
操作列表:
count(元素)函数 返回list列表中此函数的个数,存在则返回个数,不存在返回0
index(元素)函数 返回list列表中此函数的索引下标,存在则返回索引位置,不存在则报错
index(元素,indexstart,indexend) 查找list列表中开始位置到结束位置中的这个元素的下标
len(list) 列表元素个数
max(list) 列表元素最大值
min(list) 列表元素最小值
sort()函数 将列表中所有元素按顺序排列,从小到大,列表中不能字符串数字混用,int类型永远小于str类型
sort(reverse=True) 将列表中所有元素按顺序排列,从大到小,与下面的作用一样
reverse()函数 将列表中所有元素反着排列,位置在前的变成位置在后的
clear() 清空列表
copy() 复制列表
list(seq) 将元组转换为列表
注:min(list)方法以下的几个方法都会对list类型结果产生影响。
>>> names=['name','age','gender',123,'abc']
>>> lnames=names
>>> names.pop
>>> names.pop(0)
'name'
>>> names
['age', 'gender', 123, 'abc']
>>> lnames
['age', 'gender', 123, 'abc']
>>>
>>> names=['name','age','gender',123,'abc']
>>> lnames.clear()
>>> lnames
[]
>>> lnames=names[:]
>>> lnames
['name', 'age', 'gender', 123, 'abc']
>>> names.pop(0)
'name'
>>> names
['age', 'gender', 123, 'abc']
>>> lnames
['name', 'age', 'gender', 123, 'abc']
>>>
>>> lnames.clear()
>>> lnames
[]
>>> lnames=names.copy()
>>> lnames
['age', 'gender', 123, 'abc']
>>> names.append('add')
>>> names
['age', 'gender', 123, 'abc', 'add']
>>> lnames
['age', 'gender', 123, 'abc']
>>>
查看以上三段代码,第一个是用=符号为lnames赋值,然后更改names值,与lnames做对比
第二个是用切片的[:]方式,第三种是list类型的copy()方法。
根据以上结果来看,使用=符号,新列表会随着源列表的改变而改变,而[:]和copy方法,则不会受影响
结论:
当使用“=”符号将一个列表赋值给另一个列表时,,那么如果这个列表改变,另一个也会随着改变
而使用“=”符号的同时通过[:]截取的方式给另一个列表赋值,则不会随着源列表的改变而改变
copy()将源列表拷贝一份,并不会指向源列表的值,不会随着源列表的改变而改变。是一个新的列表.。
由此可见,后两种是一样的
小代码
实现菲波那切数列
>>> a,b = 0,1 >>> while b<1000: print(b,end=',') a,b = b,a+b 1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,
分别将0和1赋值给a和b
循环b小于1000,每次循环,将b的值赋值给a,将a+b的值赋值给b。
而整个代码,关键点的就是b=a+b,这句
print(b,end=',')这句话,从结果就可以看出,在数据输出之后,在后面输出的字符。
更多的数据资料请查看python3.x的官方文档