Python基础【第六篇】:基础数据类型(列表)

列表(List)

 序列

“序列”是程序设计中经常用到的数据存储方式。在其他程序设计语言中,“序列”通常被称为”数组“,用于存储相关数据项的数据结构。几乎每一种程序设计语言都提供了“序列”数据结构,如C和Basic中的一维、多维数组等。 

所有序列都可以进行某些特定的操作,这些操作包括,索引,分片,加,乘以及检查某个元素是否属于序列的成员。除此之外,Python还有计算序列长度,找出最大元素和最小元素的内建函数。

python提供的序列类型在所有程序设计语言中是最丰富、最灵活,也是功能最强大的。python中支持3种常用基本序列数据类型:字符串、列表和元祖,还支持1种映射数据类型:字典。 

创建一个列表,只需要把逗号分隔的不同的数据项使用方括号括起来即可。如下所示:

list1 = ['baidu','tencent','alibaba']
list2 = [1,2,4,5]
list3 = ["a","b",1,2,3]

与字符串的索引一样,列表索引从0开始。列表可以进行截取、组合等。

访问列表中的元素(与字符串无异)

list1 = ['baidu','tencent','alibaba']
list2 = ["a","b",1,2,3]
print('list1[0]:',list1[0])
print('list1[0:2]:',list1[0:2])
print('list2[1:]:',list2[1:])
list1[0]: baidu
list1[0:2]: ['baidu', 'tencent']
list2[1:]: ['b', 1, 2, 3]

与字符串和数字不同的是列表中的元素是可以被改变的。

list = [0,1,2,'baidu','tencent']
print("list[3]:",list[3])
list[3] = 'alibaba'
print("list[3]:",list[3])
str = 'alibaba'
str[1] = 'a'
list[3]: baidu
list[3]: alibaba
Traceback (most recent call last):
  File "C:/Users/dell/PycharmProjects/Python_1/day10/firstPy.py", line 6, in <module>
    str[1] = 'a'
TypeError: 'str' object does not support item assignment

可以删除列表中的元素,即将其设为空列表。

list = [0,1,2,'baidu','tencent']
print("list:",list)
list[3:] = []
print("list:",list)
list: [0, 1, 2, 'baidu', 'tencent']
list: [0, 1, 2]

可以使用 del 语句来删除列表的元素。

list = [0,1,2,'baidu','tencent']
print("list:",list)
del list[:3]
print("list:",list)
list: [0, 1, 2, 'baidu', 'tencent']
list: ['baidu', 'tencent']

下文会介绍python的内建函数remove()。

python列表脚本操作符

列表对 + 与 * 的操作符与字符串是相通的,一个是连接,一个是重复。

list1 = [0,1,2]
list2 = ['baidu','tencent']
print("list1 + list2:",list1 + list2)
print("list2 * 3:",list2 * 3)

list1 + list2: [0, 1, 2, 'baidu', 'tencent'] list2 * 3: ['baidu', 'tencent', 'baidu', 'tencent', 'baidu', 'tencent']

列表里的列表

列表中可以再嵌套列表,即将列表视为一个列表的元素,有着二维的概念。

list1 = [0,1,2,3]
list2 = ['baidu','tencent','alibaba']
list = [list1,list2]
print("list:",list)
print("list[1][2]:",list[1][2])
print("list[0][1:]",list[0][1:])
list: [[0, 1, 2, 3, 'affafa'], ['baidu', 'tencent', 'alibaba']]
list[1][2]: alibaba
list[0][4][3] a

字符串也可以看做是一维序列,所以当列表中有字符串,就可以用二维访问的方法取到字符串里的字符。

list1 = [0,1,2,3]
list2 = ['baidu','tencent','alibaba']
list = [list1,list2]
print("list[1][1][1:]",list[1][1][1:])
print('list2[0][:-2]:',list2[0][:-2])
list[1][1][1:] encent
list2[0][:-2]: bai

python中关于list的方法及函数 

方法描述
len(list) 列表元素个数  
max(list) 返回列表元素最大值
min(list) 返回列表元素最小值
list(seq) 将元组转换为列表
list.append(obj) 在列表末尾添加新的对象
list.count(obj) 统计某个元素在列表中出现的次数
list.extend(seq) 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
list.index(seq) 从列表中找出某个值第一个匹配项的索引位置
list.insert(index,obj) 将对象插入列表
list.pop([index=-1]) 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
list.remove(obj) 移除列表中某个值的第一个匹配项
list.reverse() 反向列表中元素
list.sort(cmp=None,key=None,reverse=False) 对原列表进行排序
list.clear() 清空列表
list.copy() 复制列表

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

方法实例代码

  • 方法len()的代码
    list = [1,23,['james',1],'kobe']
    print("len(list):",len(list))
    len(list): 4
  • 方法min(),max()的代码
    list = [1,2,6]
    print("max(list):",max(list))
    print("min(list):",min(list))
    #必须是一维列表,元素必须都是数字
    max(list): 6
    min(list): 1
  • 方法list(seq)的代码
    tuple = (123,34,'八嘎呀路','死啦死啦地')
    str = '小日本鬼子'
    print('type(tuple):',type(tuple))
    print('type(str):',type(str))
    list1 = list(tuple)
    list2 = list(str)
    print('list1:',list1)
    print('type(list1):',type(list1))
    print('list2:',list2)
    print('type(list2):',type(list2))
    type(tuple): <class 'tuple'>
    type(str): <class 'str'>
    list1: [123, 34, '八嘎呀路', '死啦死啦地']
    type(list1): <class 'list'>
    list2: ['', '', '', '', '']
    type(list2): <class 'list'>
    元组与列表的区别就在于,元组的值不可以改变,列表则可以改变。
  • 方法list.append(obj)的代码
    list = [123,34,'八嘎呀路','死啦死啦地']
    list.append('小日本')
    print("更新:",list)
    #该方法无返回值,但是会修改原来的列表。
    更新: [123, 34, '八嘎呀路', '死啦死啦地', '小日本']
  • 方法list.count(obj)的代码
    list = ['a','abc','c','abc','abc','a']
    print("元素’a‘在list中出现了{0}次".format(list.count('a')))
    print("元素’abc‘在list中出现了{0}次".format(list.count('abc')))
    元素’a‘在list中出现了2次
    元素’abc‘在list中出现了3次
  • 方法list.extend(seq)的代码#该方法没有返回值,但会在已存在的列表中添加新的列表内容。
    '''extend()与append()的区别在于,append()传入的是一个对象,
    而extend()传入的只能是列表,且将列表中的元素加到调用此方法的
    列表中
    '''
    list1 = ['tencent','taobao','alibaba'] list2 = [1,2,3] list1.append(list2) print('list1',list1) list3 = ['tencent','taobao','alibaba'] list4 = [1,2,3] list3.extend(list4) print("list3:",list3)
    list1 ['tencent', 'taobao', 'alibaba', [1, 2, 3]]
    list3: ['tencent', 'taobao', 'alibaba', 1, 2, 3]
  • 方法list.index(obj)的代码
    list = ['alibaba','taobao','tencent','baidu','taobao']
    print("对象'baidu'在list中的索引值为:",list.index('baidu'))
    print("对象'taobao'在list中的索引值为:",list.index('taobao'))
    #将会返回第一个匹配项的索引,如果没有找到则会报出异常
    对象'baidu'在list中的索引值为: 3
    对象'taobao'在list中的索引值为: 1
  • 方法list.insert(index,obj)的代码
    '''index为插入的指定位置,obj为插入的对象。两个参数必须都要有。
    此方法无返回值,作用到原列表上'''
    list = ['alibaba','tencent','baidu','taobao']
    list1 = [1,2,3]
    list.insert(2,list1)
    print('插入元素list1到list的索引2后:',list)
    list.insert(0,'wechat')
    print('插入元素’wechat‘到list的索引0后',list)
    插入元素list1到list的索引2后: ['alibaba', 'tencent', [1, 2, 3],
    'baidu', 'taobao'] 插入元素’wechat‘到list的索引0后 ['wechat', 'alibaba',
    'tencent', [1, 2, 3], 'baidu', 'taobao']
  • 方法list.pop([index=-1])的代码
    '''pop() 函数用于移除列表中的一个元素(默认最后一个元素),
    并且返回该元素的值。参数index为可选参数,默认移除最后一个元素。'''
    list = ['alibaba','tencent','baidu','taobao']
    print('我想要移除索引为2的元素:',list.pop(2))
    print('移除之后的列表:',list)
    我想要移除索引为2的元素: baidu
    移除之后的列表: ['alibaba', 'tencent', 'taobao']
  • 方法list.remove(obj)的代码
    '''remove()方法用于移除列表中某个值的第一个匹配项。
    该方法无返回值。参数obj为必须参数。'''
    list = ['alibaba','tencent','baidu','taobao','tencent']
    list.remove('tencent')
    print('移除元素‘tencent’后:',list)
    移除元素‘tencent’后: ['alibaba', 'baidu', 'taobao', 'tencent']
  • 方法list.reverse()的代码
    '''reverse()方法会对列表的元素方向排序,且没有返回值'''
    list = ['alibaba','tencent','baidu','taobao']
    print("原来的排序:",list)
    list.reverse()
    print('反向的排序:',list)
    原来的排序: ['alibaba', 'tencent', 'baidu', 'taobao']
    反向的排序: ['taobao', 'baidu', 'tencent', 'alibaba']
  • 方法list.sort(cmp=None,key=None,reverse=False)的代码 
    list1 = [1,4,3,2,7]
    list2 = ['baidu','alibaba','tencent','jingdong']
    list1.sort()
    list2.sort()
    print('默认排序:',list1)
    print('默认排序:',list2)
    #默认升序
    list1.sort(reverse=True)
    list2.sort(reverse=True)
    print("降序排序:",list1)
    print("降序排序:",list2)
    #降序排序
    #数字类型和字符类型不能相互比较,且字符按照首字符排序
    降序排序: [7, 4, 3, 2, 1]
    降序排序: ['tencent', 'jingdong', 'baidu', 'alibaba']

    通过指定列表中的元素的某些特性来排序

    #通过指定列表中的元素的某些特性来进行排序
    def takeSecond(elem):
        return elem[1]
    #此方法为获取一个序列的第二个元素。
    def str_len(elem):
        return len(elem)
    #此方法为获取一个序列的长度。
    list = [(1,8),(2,3,5),(5,1),(8,3,3),(5,6,7)]
    #列表中的元素都是元组
    list1 = ['aliabab','tencent','baidu','taobao']
    #列表中元素都是字符串
    list.sort(key=takeSecond)
    print("按照元组的第二个元素升序排序:",list)
    list1.sort(key=str_len,reverse=True)
    print("按照字符串的长度降序排序",list1)
    按照元组的第二个元素升序排序: [(5, 1), (2, 3, 5), (8, 3, 3), (5, 6, 7),
    (1, 8)] 按照字符串的长度降序排序 ['aliabab', 'tencent', 'taobao',
    'baidu']

    key接受的是一个只有一个形参的参数,如代码中的takeSecond(elem),str_len(elem)。key接受的是函数返回值,作用于列表的每个元素,表示此元素的权值,按照权值排序。

  • 方法list.clear()的代码
    '''clear() 函数用于清空列表,类似于 del a[:]。无返回值'''
    list = ['alibaba','tencent','baidu','taobao']
    list.clear()
    print('清空元素后:',list)  
    #返回空列表[]

    空列表可以简单地通过两个中括号进行表示([])- 一里面什么东西都没有,但是,如果想创建一个占用十个元素空间,却不包括任何有用内容的列表,又该怎么办呢?

    >>> list = [None]*10
    >>> list
    [None, None, None, None, None, None, None, None, None, None]

    None 是一个Python的内建值,它的确切含意是"这里什么也没有"。

  • 方法list.copy()的代码
    '''copy() 函数用于复制列表,类似于 a[:],返回复制后的新列表。'''
    list = ['alibaba','tencent','baidu','taobao']
    list_copy = list.copy()
    print("复制的列表:",list_copy)
    复制的列表: ['alibaba', 'tencent', 'baidu', 'taobao']

    Python中的复制会有两种情况,一种是改变内存一种是不改变内存。

    list1 = [1,2,3]
    list2 = list1   #直接赋值
    list3 = []      #间接赋值
    list3 = list1
    list4 = list1[:]
    list_copy = list1.copy()
    print("原来的列表:","list1:{0},list2:{1},list3:{2},
    list4:{3},list_copy:{4}
    " .format(list1,list2,list3,list4,list_copy)) #五个列表的值都是一样的。 #当我们改变原始列表list1的值时。 list1.extend([4,5,6]) print("改变原始列表之后:","list1:{0},list2:{1},list3:{2},list4:{3},list_copy:{4}" .format(list1,list2,list3,list4,list_copy))
    #五个列表的内存地址 print('五个列表的地址:',"list1:{0},list2:{1},list3:{2},list4:{3},list_copy:{4}" .format(id(list1),id(list2),id(list3),id(list4),id(list_copy))) '''前三种复制方法只是复制了一个引用变量而已,变量真正指向的内存并没有被复制, 后两种方法是真正的拷贝了变量指向的内容放到了另一块内存当中,是真正的拷贝。'''

     

posted @ 2018-08-20 13:21  焕熊  阅读(208)  评论(0编辑  收藏  举报