python列表和元组操作
列表
列表(list)是python以及其他语言中最常用到的数据结构之一。Python使用中括号[ ]来解析列表。列表是可变的(mutable)—可以改变列表的内容。
定义列表
names = ['musker','jack','jenney']
可以使用list函数常见一个列表
>>> list('hello') ['h', 'e', 'l', 'l', 'o']
通过下标访问列表中的元素,下标从0开始
>>> names[0] 'musker' >>> names[1] 'jack' >>> names[2] 'jenney'
切片:取出多个元素
>>> names = ['musker', 'jack', 'jenney','zhangsan','lisi'] >>> names[1:4] #取出下标1到4之间的元素,包括1,但不包括4 ['jack', 'jenney', 'zhangsan'] >>> names[1:-1] #取出下标1到-1(从列表最后开始)之间的元素,包括1,但不包括-1 ['jack', 'jenney', 'zhangsan'] >>> names[0:3] ['musker', 'jack', 'jenney'] >>> names[:3] #效果同上 ['musker', 'jack', 'jenney'] >>> names[0::2] #2的含义是每隔一个元素取出一个 ['musker', 'jenney', 'lisi'] >>> names[::2] #同上 ['musker', 'jenney', 'lisi']
追加
>>> names ['musker', 'jack', 'jenney', 'zhangsan', 'lisi'] >>> names.append('new name') >>> names ['musker', 'jack', 'jenney', 'zhangsan', 'lisi', 'new name']
插入
>>> names ['musker', 'jack', 'jenney', 'zhangsan', 'lisi', 'new name'] >>> names.insert(2,'强行从jeeney前面插') >>> names ['musker', 'jack', '强行从jeeney前面插', 'jenney', 'zhangsan', 'lisi', 'new name']
修改
>>> names ['musker', 'jack', '强行从jeeney前面插', 'jenney', 'zhangsan', 'lisi', 'new name'] >>> names[3] = '该换人了' >>> names ['musker', 'jack', '强行从jeeney前面插', '该换人了', 'zhangsan', 'lisi', 'new name']
删除
>>> names ['musker', 'jack', '强行从jeeney前面插', '该换人了', 'zhangsan', 'lisi', 'new name'] >>> names.pop() #删除末尾的一个元素 'new name' >>> names ['musker', 'jack', '强行从jeeney前面插', '该换人了', 'zhangsan', 'lisi'] >>> names.pop(1) #删除指定下标的元素 'jack' >>> names ['musker', '强行从jeeney前面插', '该换人了', 'zhangsan', 'lisi'] >>> names.remove('zhangsan') #删除指定的元素(没有返回值) >>> names ['musker', '强行从jeeney前面插', '该换人了', 'lisi']
扩展
>>> names ['musker', '强行从jeeney前面插', '该换人了'] >>> names2 = [1,2,3,4,5] >>> names.extend(names2) >>> names ['musker', '强行从jeeney前面插', '该换人了', 1, 2, 3, 4, 5]
统计:统计指定元素在列表中出现的次数
>>> num [1, 3, 4, 56, 2, 4, 1, 22, 3, 4, 1, 2, 31, 3] >>> num.count(3) 3
排序&翻转
>>> names ['zhangsan', 'lisi', 'wangwu', 'maliu', 'Tom', 'Jack', 'Mzc', '3', '4', 'Mzc'] >>> names.reverse() #翻转 >>> names ['Mzc', '4', '3', 'Mzc', 'Jack', 'Tom', 'maliu', 'wangwu', 'lisi', 'zhangsan'] -------------------------------------------------------------------------------- >>> names.sort() #排序,正序 >>> names ['3', '4', 'Jack', 'Mzc', 'Mzc', 'Tom', 'lisi', 'maliu', 'wangwu', 'zhangsan'] >>> names.sort(reverse=True) #倒序 >>> names ['zhangsan', 'wangwu', 'maliu', 'lisi', 'Tom', 'Mzc', 'Mzc', 'Jack', '4', '3']
获取下标
>>> names ['zhangsan', 'wangwu', 'maliu', 'lisi', 'Tom', 'Mzc', 'Mzc', 'Jack', '4', '3'] >>> names.index('Tom') 4
拷贝
>>> names ['zhangsan', 'lisi', 'wangwu', 'maliu', 'Tom', 'Jack', 'Mzc', '3', '4', 'Mzc'] >>> names_copy = names.copy() >>> names.pop() 'Mzc' >>> names ['zhangsan', 'lisi', 'wangwu', 'maliu', 'Tom', 'Jack', 'Mzc', '3', '4'] >>> names_copy ['zhangsan', 'lisi', 'wangwu', 'maliu', 'Tom', 'Jack', 'Mzc', '3', '4', 'Mzc']
这里的copy是浅copy
copy的探究:戳这里
列表生成式:
普通写法1 a = [1,3,4,6,7,7,8,9,11] 普通写法2 for index,i in enumerate(a): a[index] +=1 print(a) 生成式写法 a = [i+1 for i in range(10)] print(a) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
元组
元组其实跟列表差不多,也是存一组数,只不是它一旦创建,便不能再修改,所以又叫只读列表;
元组的意义:元组可以在映射(和集合的成员)中当作键使用——而列表则不行;元组作为很多内建函数和方法的返回值存在。
创建元组的语法很简单:如果你用逗号分隔了一些值,那么你就自动创建了元组
>>> 1, 2, 3
(1, 2, 3)
元组也是(大部分时候是)通过圆括号括起来的
>>> (1,2,3)
(1, 2, 3)
实现包括一个值的元组有些奇特——必须加个逗号
>>> 42, (42,) >>> (42,) (42,)
tuple函数的功能与list函数基本上是一样的:以一个序列作为参数并把它转化为元组
>>> tuple([1, 2, 3])
(1, 2, 3)
它只有2个方法,一个是count,一个是index,对,还有切片的功能,完毕。