Python序列内置类型之列表类型详解
1.Python序列概念
数学上,序列是被排成一列的对象(或事件)这样每个元素不是在其他元素之前,就是在其他元素之后。这里,元素之间的顺序非常重要。序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字,也就是它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。
2.Python中属于序列的内置类型种类
Python有6个序列的内置类型(列表、元组、字符串、Unicode字符串、buffer对象、xrange对象),但最常见的是列表和元组。序列都可以进行的操作包括索引,切片,加,乘,检查成员。
3.Python的列表操作
1.创建一个列表(创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可,里面的元素可以是列表,数字或者字符串等等)
list1 = [1, 2, 3, 4, 5 ]
2.索引(使用下标索引来访问列表中的值)
list1 = [1, 2, 3, 4, 5, 6, 7 ]
print(list1[0])
3.列表元素增删操作(有.append()方法,.pop()方法,.remove()方法,.del()方法,还有一些方法在下面表里,自己查哦)
list = [] ## 空列表
list.append("red")
list.append("Molly”) ## 使用 append() 添加元素
print(list)
>>>[“red”,"Molly"]
list.pop()#移除列表中的一个元素(如果括号参数为空,则默认删除最后一个元素),并且返回该元素的值
print(list)
>>>["red"]
list.remove("Molly")#删除列表中的具体元素
print(list)
>>>[]
list = ["red","molly"]
del list[1]
print(list)
>>>["red"]
注意:如果用.remove方法删除列表中具体元素,列表中有重复的元素,默认删除第一个。
4.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 | 迭代 |
5.Python列表截取(切片操作)
分片使用2个冒号分隔的3个数字来完成:[start:end:step],start:end表示从哪里切到哪里,比如创建一个列表[1,5,7,8,10],切片操作[1:3],就表示从列表的第1位截取到第三位,切片后列表为[5,7,8]。step表示要切的步长,如果step为2,切出来的列表就是[5,8]。
L = ['cdx', 'Red', 'molly']
print(L[2])
>>>'molly'
print(L[-2])
>>>"Red"
print(L[1:])
>>>['Red', 'molly']
注意:列表里 a 与 a[:] 不同。可以通过函数 id() 查看。简单来说,a[:] 是创建 a 的一个副本
4.Python列表函数&方法
Python包含以下函数:
序号 | 函数 |
---|---|
1 |
cmp(list1, list2) 比较两个列表的元素 |
2 |
len(list) 列表元素个数 |
3 |
max(list) 返回列表元素最大值 |
4 |
min(list) 返回列表元素最小值 |
5 |
list(seq) 将元组转换为列表 |
Python包含以下方法:
序号 | 方法 |
---|---|
1 |
list.append(obj) 在列表末尾添加新的对象 |
2 |
list.count(obj) 统计某个元素在列表中出现的次数 |
3 |
list.extend(seq) 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表) |
4 |
list.index(obj) 从列表中找出某个值第一个匹配项的索引位置 |
5 |
list.insert(index, obj) 将对象插入列表 |
6 |
list.pop([index=-1]) 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值 |
7 |
list.remove(obj) 移除列表中某个值的第一个匹配项 |
8 |
list.reverse() 反向列表中元素 |
9 |
list.sort(cmp=None, key=None, reverse=False) 对原列表进行排序 |
4.Python列表补充的一些高级用法及操作
1.Python创建二维列表(一个大列表里嵌套许多一维列表为二维列表),在这里给大家普及高级用法,列表推导式。
列表推导式:快速生成一个列表的方法,从右向左看,循环语句执行完后,返回i到列表,看不懂没关系,后面博主讲完高级Python你就懂了。
#列表推导式用法
#if写在前面
c = [i if i%2==0 else 1 for i in a] //遍历a的每个元素,如果i为偶数直接返回,否则直接返回1。此处if写在for前面要求必须有else项
a = [1,2,3]
c = [i if i%2==0 else 1 for i in a]
print(c)
>>>[1, 2, 1]
#if语句写在末尾
a = [1,2,3]
c = [i for i in a if i%2==0]#if条件在末尾,只筛选出符合条件的数字
print(c)
>>>[2]
二维列表创建:
#方法1是直接定义二维列表
list1 = [[0, 0, 0, 0, 0, 3, 5], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 7], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
#方法2是使用列表推导式
list2= [ [0 for i in range(5)] for i in range(5)]
print(list)
>>>[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
2.将列表中的所有元素组合成字符串
"".join()操作,此操作可以将列表中的元素取出并组合成字符串。括号里的参数是列表名。""引号中传入的是以何种字符连接。
a = ["cdx","is","Redmolly"]
print(" ".join(a))
>>>cdx is Redmolly
print("-".join(a))
>>>cdx-is-Redmolly
3.查找列表中频率最高的值
需要用到Python标准库——collections模块的Counter类,Counter类的目的是用来跟踪值出现的次数。它是一个无序的容器类型,以字典的键值对形式存储,其中元素作为key,其计数作为value。计数值可以是任意的Interger(包括0和负数)。Counter类和其他语言的bags或multisets很相似。这里不懂真没关系,等你看完字典和模块和类就懂了。
Counter的创建:
c = Counter() # 创建一个空的Counter类
c = Counter('gallahad') # 从一个可iterable对象(list、tuple、dict、字符串等)创建
c = Counter({'a': 4, 'b': 2}) # 从一个字典对象创建
c = Counter(a=4, b=2) # 从一组键值对创建
计数值访问:
c = Counter("abcdefgab")
print(c["a"])
>>>2
print(c["c"])
>>>1
Counter类中的most_common([n])方法:返回一个TopN列表。如果n没有被指定,则返回所有元素。当多个元素计数值相同时,排列是无确定顺序的。(看例子就懂)
c = Counter('abracadabra')
print(c.most_common())
>>>[('a', 5), ('r', 2), ('b', 2), ('c', 1), ('d', 1)]
print(c.most_common(3))#返回前三个键值对
>>>[('a', 5), ('r', 2), ('b', 2)]
查找列表中频率最高的值:
利用collections.Counter类
words = ['look', 'into', 'my', 'eyes', 'look', 'into',
'my', 'eyes', 'the', 'eye', 'the', 'eyes', 'not',
'around', 'the', 'eyes', "don't", 'look', 'around',
'the', 'eyes', 'look', 'into', 'my', 'eyes', "you're",
'under']
from collections import Counter
word_counts = Counter(words)
print(word_counts.most_common(3))
>>>[('eyes', 6), ('look', 4), ('the', 4)]
4.复制列表
copy函数:复制一个列表,用法如下:
name = ["red","molly"]
name_copy = names.copy()
print(name,name_copy)
>>>["red","molly"]["red","molly"]
5.移除列表重复项(只讲最简单的Python原生方法,其他的需要你自己动脑筋)
方法1,利用python中集合元素唯一性特点,将列表转为集合,将转为列表返回:
这里简单介绍下集合,明天再详细讲Python集合:集合(set)是一个无序不重复元素的序列。可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
创建集合:
#法1创建
parame = {value01,value02,...}
#法2创建
set(value)
移除列表重复项:
def deleteDuplicated(listA):
return sorted(set(listA),key = listA.index)
listA = deleteDuplicated([3,5,3,4,7])
print(listA)
6.查询N维列表的所有项(这个的难度在于,你要搞懂内嵌列表的索引)
moves = ["冰雪奇缘","变形金刚",["公主","擎天柱",["王子","威震天"]]]
def print_lol(the_list):
for each_item in the_list:
if isinstance(each_item,list):
print_lol(each_item)
else:
print(each_item)
print_lol(moves)
PS(高级内容看不懂没关系,之后退回来看就好了,关于序列类型的相互转换,等介绍完所有的序列类型后再来总结!一定要自己自己敲代码啊)