一、概念
1、列表 及列表元素;
1)列表:一系列元素的组合; 【虽然有点废话,但是确实是我对列表的理解;接下来就说点列表特有的性质】
a) 列表用方括号 [] 来表示; 列表中多个元素之间用逗号分割;
b) 期待为列表起一个 见名知意的名字;
c) 列表定义: names = [1 , "晓明", "lucy", "张起灵"]
2)列表元素 : 列表中的每一项,均为一个列表元素;
a) 列表中的元素可以毫无关系;不必要求必需为同一种类型; 所以可以定义为任意类型(包括:int型数字、string型的串、子列表变量、dict变量、对象等);
b) 列表中的元素,应该是无序、非去重的;【即可以有重复的元素】
c)列表一旦定义, 元素的位置是固定的,除非手动执行修改;
d)列表中的元素虽然可以任意,但是对于列表元素为串时,一定要用引号(可以是包括单引号,也可以是双引号),否则会报错;
2、访问和使用列表元素
1)通过索引访问列表元素 【通过索引查询列表,时间复杂度为O(1) 】
a)正序访问,从0开始,依次加一;
b)逆序访问,从-1开始, 索引-2 即为倒数第二个列表元素,以此类推;
2)可以 同使用普通变量一样,直接访问和调用列表元素;
a) 列表元素为int型:可以直接使用列表元素做数学运算:例如:
b) 列表元素为string型:可以直接使用列表元素调用string的函数、或者做串的拼接;
3、列表的切片
列表切片:顾名思义,就是将列表中的若干元素划分为一片一片的,每一片都包含了若干个列表元素;
使用场景:我们通过上述获取列表元素的方法,只能每次获取一个列表元素, 假如有一种场景,需要获取一次性读取(或修改)列表中一部分的元素值, 这种情况下,我们就可以使用切片的逻辑来完成; 有个栗子:
二、操作
1、修改列表元素
通过索引直接修改任何列表元素的值; 赋予新值即可;
2、添加元素【三个往列表中新增元素的方法】
1)append 函数: 在列表末尾添加指定的对象;
【入参】: a.append(obj); obj为要添加到列表a中的对象;
obj 可以为int型数字、 字符串(需要用引号包围)、变量(int型变量、字符串型变量、列表型变量、字典型变量等)
【返回值】:无
【作用】:在列表的末尾,添加指定对象obj;
【备注:如果新增的元素为串, 要么使用引号直接添加,要么使用string变量添加】
2)insert 函数: 在列表的任意位置插入元素;
【入参】:a.insert(index, obj):
index:表示插入的位置(这里指的是列表的下标,从0开始); obj:表示插入的对象,这里可以插入的对象同append支持的类型一致;
【返回值】:无
【作用】:在列表的指定位置,添加指定的对象;
3)extend 函数:在列表的末尾一次性插入多个元素;
【入参】:a.extend(seq);
seq 应该为一个列表或者列表变量;但是,试了一下,输入一个串、一个字典也是可以的;
运行为:
mylist = [1, 2, 3, 4]
mylist.extend([4, 5, 6])
print "直接插入一个列表变量,结果为: ", mylist
mylist.extend('abc')
print "直接插入一个串,结果为: ", mylist
onedict={'key1': 'value1', 'key2': 'value2'}
mylist.extend(onedict)
print "直接插入一个串,结果为: ", mylist
结果为:
the original list is: [1, 2, 3, 4]
直接插入一个列表变量,结果为: [1, 2, 3, 4, 4, 5, 6]
直接插入一个串,结果为: [1, 2, 3, 4, 4, 5, 6, 'a', 'b', 'c']
直接插入一个串,结果为: [1, 2, 3, 4, 4, 5, 6, 'a', 'b', 'c', 'key2', 'key1']
解析:
1、extend函数,将入参集合中 每个元素都当做一个单独的列表元素,依次插入到原有列表中;
2、若入参为一个字典型变量,则只插入了key;
3、这一点同append函数不同, append函数会将整个字典做为一个列表元素,插入到原有列表中,如:
mylist = [1, 2, 3, 4]
onedict={'key1': 'value1', 'key2': 'value2'}
mylist.append(onedict)
print "使用append方法插入一个字典型变量,结果为 : ", mylist
结果为:
使用append方法插入一个字典型变量,结果为 : [1, 2, 3, 4, [4, 5, 6], {'key2': 'value2', 'key1': 'value1'}]
【返回值】:无
【作用】:在列表的末尾,添加指定的 多个元素的集合 ;
【一个疑惑】:append函数和extend函数,均可以用串、列表和字典做为入参,那么他们的区别是:
运行代码:
mylist = [1, 2, 3, 4]
print "the original list is: ", mylist
mylist.append([4, 5, 6])
print "the append result is: ", mylist
print '===================================================='
print "the original list is: ", mylist
mylist.extend([4, 5, 6])
print "the extend result is: ", mylist
结果为:
the original list is: [1, 2, 3, 4]
the append result is: [1, 2, 3, 4, [4, 5, 6]]
====================================================
the original list is: [1, 2, 3, 4, [4, 5, 6]]
the extend result is: [1, 2, 3, 4, [4, 5, 6], 4, 5, 6]
解析:
同样是以一个列表做为入参, append和extend的处理逻辑为:
append: 本质是插入一个列表元素; 这样就 将入参: [4, 5, 6],当做一个列表元素,整体插入到原有列表的尾部; 所以我们看到原有列表mylist 中 又嵌套了一个列表;
extend: 本质是用于插入 一堆 列表元素; 这样就将入参: [4, 5, 6], 当做是一个列表元素的集合, 里面的每个元素都做为一个单独的元素,插入到了原有列表mylist中;
3、删除列表元素
1) remove函数:从列表中删除指定元素
【入参】: mylist.remove(obj)
obj: 指定删除的元素;这里的obj,同append的入参一样,可以是任何对象,只要是原有列表中有的都可以进行删除;
执行:
mylist=[1, 2, 3, 4, [4, 5, 6], {'key2': 'value2', 'key1': 'value1'}, 4, 5, 6, 'a', 'b', 'c', 'key2', 'key1']
mylist.remove(4)
print '通过remove删除指定元素4后的结果:', mylist
mylist.remove([4, 5, 6])
print '通过remove删除指定元素[4,5,6]后的结果:', mylist
mylist.remove({'key2': 'value2', 'key1': 'value1'})
print '通过remove删除指定元素{'key2': 'value2', 'key1': 'value1'}后的结果:', mylist
结果为:
通过remove删除指定元素4后的结果:[1, 2, 3, [4, 5, 6], {'key2': 'value2', 'key1': 'value1'}, 4, 5, 6, 'a', 'b', 'c', 'key2', 'key1']
【备注】若列表中包含多个相同的元素,则只删除第一个匹配到的元素;
通过remove删除指定元素[4,5,6]后的结果:[1, 2, 3, {'key2': 'value2', 'key1': 'value1'}, 4, 5, 6, 'a', 'b', 'c', 'key2', 'key1']
通过remove删除指定元素{'key2': 'value2', 'key1': 'value1'} 后的结果:[1, 2, 3, 4, 4, 5, 6, 'a', 'b', 'c', 'key2', 'key1']
2)del 操作;从列表的指定位置删除元素;
【入参】: del mylist[index]; index 指定删除的位置,从0开始;逆序从-1开始;
【返回值】:无
【作用】: 从列表中的任意指定位置删除元素;
mylist=[1, 2, 3, 4, {'key2': 'value2', 'key1': 'value1'}, 4, 5, 6, 'a', 'b', 'c', 'key2', 'key1']
del mylist[-1]
print '通过del 操作删除列表的最后一个元素,结果为:', mylist
结果为:
通过del 操作删除列表的最后一个元素,结果为: [1, 2, 3, 4, {'key2': 'value2', 'key1': 'value1'}, 4, 5, 6, 'a', 'b', 'c', 'key2']
3)pop函数: 从列表中移除指定位置的元素,同时输出该元素;
【入参】: mylist.pop(index); index 指定移除的位置,从0开始,逆序从-1开始; 若不填,默认为-1;
【返回值】: 被删除的元素
执行:
mylist=[2, 3, 4, [4, 5, 6], {'key2': 'value2', 'key1': 'value1'}, 4, 6, 'a', 'b', 'c', 'key2', 'key1']
del_result=mylist.pop(3)
print '通过pop移除列表中下标为3的元素, 该元素为:', del_result
print '移除后,列表中的元素为:', mylist
结果为:
通过pop移除列表中下标为3的元素, 该元素为: [4, 5, 6]
移除后,列表中的元素为: [2, 3, 4, {'key2': 'value2', 'key1': 'value1'}, 4, 6, 'a', 'b', 'c', 'key2', 'key1']
4、一些其他常用的操作;
1)找出列表中元素的最大值和最小值:
max_result = max(mylist) : 入参为list; 出参为list中的最大值;
min_result = min(mylist): 入参为list,出参为list中的最小值;
【备注】: 这里的最大值,最小值,如果列表元素均为数字,那么可以直接找到最大值和最小值;
如果列表元素中包含了字符串,则以字符的ASCII 值为准;
mylist=[1, 2, 3, 4, [4, 5, 6], {'key2': 'value2', 'key1': 'value1'}, 4, 5, 6, 'a', 'b', 'c', 'key2', 'key1']
print 'the max value is:', max(mylist)
结果为:
the max value is: 'key2'
2)统计列表中元素的个数【即列表的长度】
list_len = len(mylist)
3)统计列表中,指定元素出现的次数;
obj_count = mylist.count(obj)
4)原位置 逆序列表中的元素;【即reverse操作】
没有入参,没有返回值,但是会直接作用到原列表中,使其元素逆序;
mylist = [1, 2, 3, 4, [4, 5, 6], {'key2': 'value2', 'key1': 'value1'}, 4, 5, 6, 'a', 'b', 'c', 'key2', 'key1']
mylist.reverse()
print mylist
结果为:
['key1', 'key2', 'c', 'b', 'a', 6, 5, 4, {'key2': 'value2', 'key1': 'value1'}, [4, 5, 6], 4, 3, 2, 1]
5)sort :对原有的列表做排序;【这个是直接调用的Python的sort函数实现的】
mylist.sort(): 函数入参有三个可选参数;没有返回值; 结果使得列表中的元素做排序;
入参1:cmp
入参2:key
入参3:reverse 指定排序规则, True 为降序, False为升序;【若没有定义该参数,默认为False升序】
【关于Python内建函数 sort和sorted 函数的用法,待补充。。。】