Python系列(二):玩转列表

一.初识列表

列表是python中比较重要的一种数据类型,它也是python中用途最为广泛的数据类型之一,对于列表我们首先要有如下认知:

  • 列表中是一种可变数据类型,即列表中的元素可以随意修改;
  • 列表中的元素是有序的;
  • 列表的元素写在方括号[]之间,各元素用逗号分隔,各个元素可以是各种类型的数据[],例如列表,元组,字典,字符串,数字等等。

二.列表的创建

列表有许多的创建方法:

  • 直接使用lst=[element1,element2,element3,…elementn]的形式
  • 使用list()方法将其它的数据类型转换为列表
  • 通过列表解析利用其它可迭代对象来创建列表
  • 通过深拷贝操作来利用已知列表创建新列表

下面是上述方法的代码示例

import copy

#最简单直接的列表创建方法lst=[...]
lst=['abc',1.45,['Tom','Jim'],(3.5,5),{'country':'china','city':'chengdu'}]
print(lst)
'''
运行结果:
        ['abc', 1.45, ['Tom', 'Jim'], (3.5, 5), {'country': 'china', 'city': 'chengdu'}]   
'''

#通过list方法
lst1=list(range(0,10))
print(lst1)
'''
运行结果:
        [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
'''

#使用列表解析
lst2=[x**3 for x in range(1,10)]
print(lst2)
'''
运行结果:
        [1, 8, 27, 64, 125, 216, 343, 512, 729]
'''

#利用深拷贝操作创建新的列表
new_lst=lst[:]#深拷贝方法一
new_lst1=copy.deepcopy(new_lst)#深拷贝方法二
print(new_lst)
print(new_lst1)
'''
运行结果:
        ['abc', 1.45, ['Tom', 'Jim'], (3.5, 5), {'country': 'china', 'city': 'chengdu'}]
        ['abc', 1.45, ['Tom', 'Jim'], (3.5, 5), {'country': 'china', 'city': 'chengdu'}]

'''

三.列表的索引和切片

3.1.索引

对于列表而言,倘若想获取指定位置的元素一般都会使用索引,即采用形如lst[index]的形式,列表可以从0开始索引,也可以从-1开始索引。使用后者时-1将索引倒数第一个元素,-2将索引倒数第二个元素,以此类推…,下面是索引的代码示例:

#创建列表
lst=['abc',1.45,['Tom','Jim'],(3.5,5),{'country':'china','city':'chengdu'}]
#从0开始索引列表
for i in range(len(lst)):
    print(lst[i])
'''
运行结果:
        abc
        1.45
        ['Tom', 'Jim']
        (3.5, 5)
        {'country': 'china', 'city': 'chengdu'}
'''
#从-1开始索引列表
index=[-1,-2,-3,-4,-5]
for i in index:
    print(lst[i])
'''
运行结果:
        {'country': 'china', 'city': 'chengdu'}
        (3.5, 5)
        ['Tom', 'Jim']
        1.45
        abc
'''

3.2.切片

列表可以通过切片操作来获取列表中的一些元素,切片的表达式为:list[start:stop:step],其中:

  • start决定创建的数字列表从那个数字开始,默认为0(可选参数);
  • stop决定创建的数字列表到那个数字结束;
  • step表示截取步长,即截取的一个数据需要加上该步长再截取(可选参数)。

代码示例为:

#列表的切片操作
lst=list(range(-10,-1,1))
#输出原列表
print(lst)
#截取第4个至第5个数
print(lst[3:5])
#截取前3个数
print(lst[:3])
#从第2个数开始截取,至第六个数结束,截取步长为2
print(lst[1:5:2])
#截取列表最后三个数
print(lst[-3:])
#截取倒数第5个数至倒数第3个数
print(lst[-5:-2])
'''
运行结果:
        [-10, -9, -8, -7, -6, -5, -4, -3, -2]
        [-7, -6]
        [-10, -9, -8]
        [-9, -7]
        [-4, -3, -2]
        [-6, -5, -4]
'''

四.操作列表

4.1.增

往列表中增加元素的方法:

  • 使用append()方法往列表末尾添加元素
  • 使用insert(index,obj)往列表指定位置处添加元素

对应的代码示例为:

#创建列表
lst=['abc',1.45,['Tom','Jim'],(3.5,5),{'country':'china','city':'chengdu'}]
#使用append往列表末尾添加元素
lst.append(complex(4,5))
print(lst)
#使用insert插入元素到列表的开头
lst.insert(0,-8)
print(lst)
'''
运行结果:
        ['abc', 1.45, ['Tom', 'Jim'], (3.5, 5), {'country': 'china', 'city': 'chengdu'}, (4+5j)]
        [-8, 'abc', 1.45, ['Tom', 'Jim'], (3.5, 5), {'country': 'china', 'city': 'chengdu'}, (4+5j)]
'''

4.2.删

列表中删除元素的方法有:

  • 使用del lst[index]方法删除列表中指定索引处的元素,或者直接使用del lst删除整个列表;
  • 使用pop()方法可以删除列表的最后一个元素并将删除的元素返回,类似与栈的出栈函数的功能,与栈的出栈操作不同的是:列表的pop方法可以指定列表中任意索引处的元素删除并弹出其值,只需要指定对应的索引即可
  • 使用remove(value)可以将删除列表中值为value的第一个元素,注意这个值一定要在列表中存在,否则将报错ValueError;

代码示例为:

#创建列表
lst=['abc',1.45,['Tom','Jim'],(3.5,5),{'country':'china','city':'chengdu'}]

#使用del删除列表的第一个元素元素
del lst[0]
print(lst)
'''
运行结果:
        [1.45, ['Tom', 'Jim'], (3.5, 5), {'country': 'china', 'city': 'chengdu'}]
'''

#删除整个列表,这种情况下无法使用print输出lst因为列表都不存在了
del lst

#重新创建列表lst
lst=['abc',1.45,['Tom','Jim'],(3.5,5),{'country':'china','city':'chengdu'}]

#使用pop删除尾部的元素并返回该元素
a=lst.pop()
print(a)
print(lst)
'''
运行结果为:
        {'country': 'china', 'city': 'chengdu'}
        ['abc', 1.45, ['Tom', 'Jim'], (3.5, 5)]
'''

#使用pop删除列表的第2个元素并返回该元素
b=lst.pop(1)
print(b)
print(lst)
'''
运行结果为:
        1.45
        ['abc', ['Tom', 'Jim'], (3.5, 5)]
'''

#使用remove删除列表中值为'abc'的第一个元素
lst.remove('abc')
print(lst)
'''
运行结果为:
        [['Tom', 'Jim'], (3.5, 5)]
'''

4.3.改

修改操作对列表而言是比较简单的,因为列表的元素是可以随意修改的,因此只需使用形如lst[index]=new_value就可以修改原列表中的元素。
代码示例为:

#创建列表
lst=['abc',1.45,['Tom','Jim'],(3.5,5),{'country':'china','city':'chengdu'}]
#修改列表的第一个元素
lst[0]='ABC'
print(lst)
'''
代码运行结果为:
            ['ABC', 1.45, ['Tom', 'Jim'], (3.5, 5), {'country': 'china', 'city': 'chengdu'}]
'''

4.4.查

在python中存在in/not in两个操作符,可以用来判断元素是否存在于/是否不存在于某个列表中,是则返回true。
代码示例为:

#创建列表
lst=['abc',1.45,['Tom','Jim'],(3.5,5),{'country':'china','city':'chengdu'}]
new_lst=[(3.5,5),'ABC']

#用循环逐个取出new_lst中的元素并判断在lst中是否存在相同的元素,存在输出该元素在lst中,否则输出该元素不存在
for element in new_lst:
    if element in lst:
        print("{0} is in lst".format(element))
    if element not in lst:
        print("Not Exist")
'''
运行结果:
        (3.5, 5) is in lst
        Not Exist
'''

4.5.其它常用操作

4.5.1.获取列表长度

通过len(lst)可以获取列表lst的长度,示例代码如下:

lst=['abc',1.45,['Tom','Jim'],(3.5,5),{'country':'china','city':'chengdu'}]
print(len(lst))
'''
运行结果:
        5
'''

4.5.2.列表拼接

使用加号+可以对列表进行拼接,示例代码如下:

lst=['abc',1.45,['Tom','Jim'],(3.5,5),{'country':'china','city':'chengdu'}]
lst1=[1,3.5,'python']
lst+=lst1
print(lst)
'''
运行结果:
        ['abc', 1.45, ['Tom', 'Jim'], (3.5, 5), {'country': 'china', 'city': 'chengdu'}, 1, 3.5, 'python']
'''

4.5.3.数值列表的统计操作

数值列表是元素全是数字的列表,我们可以用max(list),min(list),sum(list),list.count(obj)来分别统计列表的最大值,列表的最小值,列表中元素的和,列表中某个元素出现的次数,示例代码如下:

lst=[1,3.5,7,9,2,10,23,2,2]
print(lst)
print('max:',max(lst))
print('min:',min(lst))
print('sum:',sum(lst))
print('{0} exists in lst {1} times '.format(2,lst.count(2)))
'''
运行结果:
        [1, 3.5, 7, 9, 2, 10, 23, 2, 2]
        max: 23
        min: 1
        sum: 59.5
        2 exists in lst 3 times
'''

4.5.3.对列表的翻转

通过lst.reverse()可以将列表中的元素顺序翻转,示例代码如下:

lst=['abc',1.45,['Tom','Jim'],(3.5,5),{'country':'china','city':'chengdu'}]
print(lst)
lst.reverse()
print(lst)
'''
运行结果:
        ['abc', 1.45, ['Tom', 'Jim'], (3.5, 5), {'country': 'china', 'city': 'chengdu'}]
        [{'country': 'china', 'city': 'chengdu'}, (3.5, 5), ['Tom', 'Jim'], 1.45, 'abc']        
'''

4.5.4.列表排序

使用sort(reverse,key)函数可以对列表进行排序,使用该方法将会真正改变列表元素的顺序,对于该函数的两个参数:

  • reverse是一个布尔类型的值,为True时将会降序排列,为False时将会升序排列,默认值为False;
  • key为排序的标准,可以自定义函数作为排序标准并作为第二个参数传入(可选参数)。

使用sorted(obj,reverse,key)也可以对列表进行排序,但会返回排序后的列表且不改变原来的列表,其参数reverse和key和sort()函数类似
示例代码如下:

#创建列表
lst=['abc',1.45,['Tom','Jim'],(3.5,5),{'country':'china','city':'chengdu'}]

#排序函数按元素的长度排序,浮点数的长度为1
def sortCritera(e):
    if type(e)==float:
        return 1
    else:
        return len(e)


#使用sort方法指定降序排序,排序按元素的长度
lst.sort(reverse=True,key=sortCritera)
print(lst)

#使用sorted进行升序排序,使用sorted排序后lst不变
newlst=sorted(lst,key=sortCritera)
print(lst)
print(newlst)
'''
运行结果:
        ['abc', ['Tom', 'Jim'], (3.5, 5), {'country': 'china', 'city': 'chengdu'}, 1.45]
        ['abc', ['Tom', 'Jim'], (3.5, 5), {'country': 'china', 'city': 'chengdu'}, 1.45]
        [1.45, ['Tom', 'Jim'], (3.5, 5), {'country': 'china', 'city': 'chengdu'}, 'abc']
'''

五.列表解析

列表解析可以让我们通过其它可迭代对象来创建一个列表,列表解析的语法为:expression for iter_val in iterable if condiction,expression为最后执行的结果即保存在列表中的元素,后面的循环语句可以有多个,可以嵌套循环,if表达式也可以有多个。

#先创建列表x,再利用列表解析创建y,最后利用x,y使用列表解析创建z
x=list(range(1,10))
y=[i**2 for i in x]
z=[(a,b) for a,b in zip(x,y)]
print(z)
'''
运行结果:
        [(1, 1), (2, 4), (3, 9), (4, 16), (5, 25), (6, 36), (7, 49), (8, 64), (9, 81)]
'''

要想更深刻的理解列表解析可以参见文章:python笔记_列表解析

六.结语

上述介绍基本上攘括了python列表的所有常见用法,当然列表的功能远不及如此,例如列表可以当作堆栈来使用(其中append函数可以当做入栈来使用,pop函数可以当作出栈函数来使用),列表也可以当作队列使用等等。我们对列表的熟练只有建立在多用且要灵活应用的基础上。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

斯曦巍峨

码文不易,有条件的可以支持一下

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值