列表是Python中最基本的数据结构之一,它是一种有序可变的集合,集合内可以存放任何数据类型,并且可对集合的元素进行增删改查操作。
一、列表的创建
在一个方括号([])内添加列表元素的,元素之前通过逗号分隔开,如下:
list1 = [1,2,3,4,5]
list2 = ['a',b',1,'d','e']
list3 = ['python','java','C','C++']
二、访问列表
可以通过索引访问列表中的某个元素,列表的索引值是0从开始,如下:
>>> list1 = [1,2,3,4,5]
>>> list1[0]
1
>>>
与字符串一样,列表也可以进行截取、组合等。
也可以通过索引为负数的形式获取列表元素,索引是从-1开始以此类推,当索引为-1时表示取倒数第一元素,-2为倒数第二个元素,...
>>> list3 = ['python','java','c','c++','go','shell']
>>> print(list3[-1]) #获取索引为-1的元素值shell
['shell']
>>> print(list3[-4]) #获取索引为-4的元素值c
c
>>> print(list3[-1:-4:-1]) #通过从右往左的顺序获取索引-1到-4之前的元素
['shell', 'go', 'c++']
>>>
上例中list3[-1:-4:-1]表示从右往左获取-1到-4之前的列表元素,其中-1:-4表示获取-1到-4之前的元素,最后一个表示步长,步长为负数表示从右往左获取元素,正数表示从左往右获取元素,没有步长的话表示默认按照步长为1从左往右的顺序获取元素。
三、python列表脚本操作符
列表对 + 和 * 的操作符与字符串相似。+ 号用于组合列表,* 号用于重复列表。
Python 表达式 | 结果 | 描述 |
---|---|---|
len([1, 2, 3]) | 3 | 长度 |
[1, 2, 3] + [4, 5, 6] | [1, 2, 3, 4, 5, 6] | 组合 |
['Hi!'] * 4 | ['Hi!', 'Hi!', 'Hi!', 'Hi!'] | 重复 |
3 in [1, 2, 3] | True | 元素是否存在于列表中 |
for x in [1, 2, 3]: print x, | 1 2 3 | 迭代 |
四、列表操作函数
1、cmp(list1, list2):比较两个列表的元素
2、len(list):列表元素个数
>>> list1 = [1,2,3,4]
>>> len(list1)
4
>>>
3、max(list):返回列表元素最大值
>>> list1 = [1,2,3,4]
>>> max(list1)
4
>>>
4、min(list):返回列表元素最小值
>>> list1 = [1,2,3,4]
>>> min(list1)
1
>>>
5、count():在list中统计object的个数。
返回值:返回object的个数。
>>> list1=[66, 55, 44, 33, 22]
>>> list1.count(22)
1
6、index(self, object, start, stop):在list中查找object的索引。
返回值:返回object在list中的的位置索引,其中,object表示需要查找的元素;
start表示list中查找的起始位置;stop表示list中查找的末尾位置。
>>> list1=[66, 55, 44, 33, 22]
>>> list1.index(22)
4
五、列表常用操作方法
1、修改列表元素
>>> list1=['张三','男',21]
>>> list1[0]='李四'
>>> list1
['李四', '男', 21]
>>>
2、删除列表元素
删除列表中元素有3中方式:
(1)使用 del 语句来删除列表的的元素;
>>> list1=[1,2,3,4,5,6]
>>> del list1[0]
>>> list1
[2, 3, 4, 5, 6]
(2)使用pop()移除某元素并返回该元素,pop参数为列表的索引,不填写默认为最后一个元素;
>>> list2=[123,'asdf','wsx','qwer',56]
>>> list2.pop(2)
'wsx'
(3)使用remove()删除从左找到的第一个指定元素,remove的参数值为要删除元素值。
>>> list3=['zhangsan','lisi','lisan',22]
>>> list3.remove(22)
>>> list3
['zhangsan', 'lisi', 'lisan']
3、增加列表元素
增加列表元素有4中方式:
(1)append()追加单个元素到List的尾部,只接受一个参数,参数可以是任何数据类型,被追加的元素在List中保持着原结构类型,此元素如果是一个list,那么这个list将作为一个整体进行追加。
>>> list3=['zhangsan','lisi','lisan',22]
>>> list3.append('wangwu')
>>> list3
['zhangsan', 'lisi', 'lisan', 22, 'wangwu']
>>> list4=[22,33,44]
>>> list3.append(list4)
>>> list3
['zhangsan', 'lisi', 'lisan', 22, 'wangwu', [22, 33, 44]]
(2)extend(self, iterable) 将一个列表中每个元素分别添加到另一个列表中,只接受一个参数;extend()相当于是将list B 连接到list A上。
>>> list3.extend('zhaoliu')
>>> list3
['zhangsan', 'lisi', 'lisan', 22, 'wangwu', [22, 33, 44], 'z', 'h', 'a', 'o', 'l', 'i', 'u']
>>>
iterable参数表示能够迭代的元素(数字不能迭代),字符串是可以迭代的,如上例上字符串一个字符一个字符的迭代添加在列表中。
>>> list4=[22,33,44]
>>> list3.extend(list4)
>>> list3
['zhangsan', 'lisi', 'lisan', 22, 'wangwu', [22, 33, 44], 'z', 'h', 'a', 'o', 'l', 'i', 'u', 22, 33, 44]
将list4中的元素分别添加进list3中。
(3) insert() 将一个元素插入到列表中,但其参数有两个(如insert(1,"qaz")),第一个参数是索引点,即插入的位置,第二个参数是插入的元素。
>>> list4=[22,33,44]
>>> list4.insert(3,55)
>>> list4
[22, 33, 44, 55]
(4)+ 加号,将两个list相加,会返回到一个新的list对象,注意与前三种的区别。前面三种方法(append, extend, insert)可对列表增加元素的操作,他们没有返回值,是直接修改了原数据对象。 将两个list相加,需要创建新的list对象,从而需要消耗额外的内存,特别是当list较大时,尽量不要使用“+”来添加list,而应该尽可能使用List的append()方法。
>>> list2=[66]
>>> list5=list2+list4
>>> list5
[66, 22, 33, 44, 55]
4、列表元素排序
sort()
>>> list5
[22, 33, 44, 55, 66]
>>> list5.sort(reverse=True)
>>> list5
[66, 55, 44, 33, 22]
5、遍历列表元素
>>> list5
[66, 55, 44, 33, 22]
>>> for value in list5:
print(value)
#返回结果
66
55
44
33
22
6、复制列表
copy(self)
用途:复制一份列表。
返回值:返回列表的一个副本(修改副本不会改变原有的列表)。
>>> list1=list5.copy()
>>> list1
[66, 55, 44, 33, 22]
>>>
六、列表切片
切片操作(slice)可以从一个字符串中获取子字符串(字符串的一部分)。我们使用一对方括号、起始偏移量start、终止偏移量end 以及可选的步长step 来定义一个分片。
格式: [start:end:step]
start:开始索引
end:结束索引
step:步长
[:] 提取从开头(默认位置0)到结尾(默认位置-1)的整个字符串
[start:] 从start 提取到结尾
[:end] 从开头提取到end - 1
[start:end] 从start 提取到end - 1
[start:end:step] 从start 提取到end - 1,每step 个字符提取一个
左侧第一个字符的位置/偏移量为0,右侧最后一个字符的位置/偏移量为-1
>>> list3=['zhangsan', 'lisi', 'lisan', 22, 'wangwu', [22, 33, 44, 55], 'z', 'h', 'a', 'o', 'l', 'i', 'u', 22, 33, 44]
>>> list7 = list3[2:5]
>>> list7
['lisan', 22, 'wangwu']
>>> print(list3[::2])
['zhangsan', 'lisan', 'wangwu', 'z', 'a', 'l', 'u', 33]
>>> print(list3[2::3])
['lisan', [22, 33, 44, 55], 'a', 'i', 33]
七、元祖,字典,列表,字符串之间转换
直接声明的list和tuple无法通过dict()转换成dict类型,直接声明的dict可以通过tuple()和list()分别转换成tuple和list类型(结果只包含了keys),可是此时却能通过dict()反转回原来的dict类型。
字典
1、字典--->元祖
结果只包含了keys
>>> dict={'name':'zhangsan','age':7}
>>> print(tuple(dict))
('name', 'age')
>>>
字典中的值value转换成元祖
2、字典-->字符串
>>> dict={'name':'zhangsan','age':7}
>>> print(str(dict))
{'name': 'zhangsan', 'age': 7}
>>>
3、字典--->列表
结果只包含了keys
>>> dict={'name':'zhangsan','age':7}
>>> list(dict)
['name', 'age']
>>> type(list(dict))
<class 'list'>
>>>
字典中的值value转换成列表
>>> dict={'name':'zhangsan','age':7}
>>> a = list(dict.values())
>>> print(a)
['zhangsan', 7]
>>> type(a)
<class 'list'>
>>>
元祖
1、元祖--->字符串
>>> b = (1,2,3,4,5)
>>> print(str(b))
(1, 2, 3, 4, 5)
>>>
2、元祖--->列表
>>> b = (1,2,3,4,5)
>>> print(list(b))
[1, 2, 3, 4, 5]
>>> type(list(b))
<class 'list'>
>>>
3、元祖不能转换成字典
列表
1、列表--->字符串
>>> c=[1,2,3,4,5]
>>> str(c)
'[1, 2, 3, 4, 5]'
>>> type(str(c))
<class 'str'>
>>>
2、列表--->元祖
>>> c=[1,2,3,4,5]
>>> tuple(c)
(1, 2, 3, 4, 5)
>>> type(tuple(c))
<class 'tuple'>
>>>
3、列表不能转换成元祖
字符串
1、字符串-->字典
>>> eval("{'name':'zhangsan','age':7}")
{'name': 'zhangsan', 'age': 7}
>>>
2、字符串-->元祖
>>> tuple(eval("{'name':'zhangsan','age':7}"))
('name', 'age')
>>>
3、字符串-->列表
>>> list(eval("{'name':'zhangsan','age':7}"))
['name', 'age']