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(高级内容看不懂没关系,之后退回来看就好了,关于序列类型的相互转换,等介绍完所有的序列类型后再来总结!一定要自己自己敲代码啊)

 

 

 

 

 

 

 

 

 

 

 

内容来源于网络如有侵权请私信删除
你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!