热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python3.5修炼手册7

列表列表不同于元组和字符串的地方:列表的内容是可变(mutable)的。更新列表的方法有:元素赋值、元素删除、分片赋值,和列表方法元素赋值通过编号标记某个特定位置的元素,并对该位置的元素重

列表


列表不同于元组和字符串的地方:列表的内容是可变(mutable)的。


更新列表的方法有:元素赋值、元素删除、分片赋值,和列表方法


元素赋值

通过编号标记某个特定位置的元素,并对该位置的元素重新赋值

例如:

>>> a=[1,2,3,4,5,6]>>> a[1]=10
>>> print(a)

[1, 10, 3, 4, 5, 6]

>>> a[5]=88>>> print(a)

[1, 10, 3, 4, 5, 6,88]

从上例可以看出是根据编号对列表中的某个元素进行赋值

下面对上例进行不同类型的赋值

>>> #对编号4的元素赋一个字符串的值>>> a[4]='duyuheng'>>> print(a)

[1, 10, 3, 4, 'duyuheng', 88]

>>>  #查看赋值函数类型... type(a[5])>>> type(a[4])

从赋值函数的类型可以看出,一个列表中的元素可以赋不同类型的值。

千万要注意;不能对一个不存在元素的位置赋值

可以和乘法中的初始化x个为空的序列结合起来使用

例如:

>>> tring=[None]*5>>> tring[4]='duyuheng'>>> print(tring)

[None, None, None, None, 'duyuheng']


增加元素赋值

在Pyhon中是可以给列表增加元素的,使用append()方法就可以使实现

>>> list1=[1,2,3]>>> list1.append(4)>>> print(list1)

[1, 2, 3, 4]

append()是一个用于在列表末尾添加新对象的方法。

      语法 list.append(obj)    

      list代表列表,obj 代表需要添加到list列表末尾的对象

注意:append()方法不是简单的返回一个修改过的新列表,而是直接修改了原来的列表。

append()方法演示:

>>> a=[1,2,3]>>> #添加字符串... a.append('si')>>> print(a)

[1, 2, 3, 'si']

>>> b=['a','b','c']>>> #添加数字... b.append(666)>>> print(b)

['a', 'b', 'c', 666]

append()是可以往数字列表中添加字符串,也可以往字符串序列中添加数字。


删除元素

能在列表中增加元素,当然也可以在列表中删除元素。

例如:

>>> list2=['a','b','c','d','e']>>> del list2[3]>>> print('删除第4个元素后:',list2)

删除第4个元素后: ['a', 'b', 'c', 'e']

>>> len(list2)

4

del可以删除列表中的字符,也可以删除列表中的数字。

例如:

>>> num=[10,20,30]>>> len(num)

3

>>> del num[2]>>> print('删除第3个元素后:',num)>>> len(num)

2


分片赋值

分片赋值是列表的一个强大的特性。

使用list()函数可以直接将字符串转换为列表。

例如:

>>> list('我爱你美丽的姑娘')['我', '爱', '你', '美', '丽', '的', '姑', '娘']>>> boil=list('我爱你美丽的姑娘')>>> print(boil)

['我', '爱', '你', '美', '丽', '的', '姑', '娘']

可以通过分片赋值直接对列表进行变更。

例如:

>>> show=list('hi,boy')>>> print(show)

['h', 'i', ',', 'b', 'o', 'y']

>>> show[3:]=list('man')>>> print(show)

['h', 'i', ',', 'm', 'a', 'n']

从例子中可以看出分片将编号3之后位置的元素做了变更,将boy替换成了man

也可以使用与原序列不等长的序列将分片替换

>>> greeting=list('hi')>>> print(greeting)

['h', 'i']

>>> greeting[1:] =list('ello')>>> print(greeting)

['h', 'e', 'l', 'l', 'o']

还可以在不替换任何元素的情况下在任意位置插入新的元素。

例如:

>>> love=list('我爱你美丽的姑娘')>>> print(love)

['我', '爱', '你', '美', '丽', '的', '姑', '娘']

>>> love[1:1]=list('不')>>> print(love)

['我', '不', '爱', '你', '美', '丽', '的', '姑', '娘']

通过分片赋值删除元素也是可以的

例如:

>>> love=list('我爱你美丽的姑娘')>>> print(love)

['我', '爱', '你', '美', '丽', '的', '姑', '娘']

>>> love[3:6]=[]>>> print(love)

['我', '爱', '你', '姑', '娘']

分片删除的功能和del删除的操作的结果是一样的


嵌套列表

在列表中可以嵌套列表,且套的列表取出后还是列表。

例如:

>>> field=['a','b','c']>>> print(field)

['a', 'b', 'c']

>>> num=[1,2,3]>>> print(num)

[1, 2, 3]

>>> mix=[field,num]>>> print(mix)

[['a', 'b', 'c'], [1, 2, 3]]

>>> mix[0]

['a', 'b', 'c']

>>> mix[1]

[1, 2, 3]


列表方法

方法是与对象有紧密联系的函数,对象可能是列表、数字,也可能是字符串或者其他类型的对象。

调用语法:对象.方法(参数)


count

count()方法用统计某个元素在列表中出现的次数。

count()方法的语法:

          list.count(obj)

          list代表列表,obj代表列表中统计的对象。

count()方法演示: 

#(以后就使用PyCharm敲代码了,cmd里面敲的太累了!!!)

field=list('hello.world')print(field)

C:\python\python.exe C:/python.py/liebiaofangfa.py

['h', 'e', 'l', 'l', 'o', '.', 'w', 'o', 'r', 'k', 'd']

print('列表field中,字母o的个数:',field.count('o'))

C:\python\python.exe C:/python.py/liebiaofangfa.py

['h', 'e', 'l', 'l', 'o', '.', 'w', 'o', 'r', 'k', 'd']

列表field中,字母o的个数: 2

print('列表field中,字母l的个数:',field.count('l'))

C:\python\python.exe C:/python.py/liebiaofangfa.py

列表field中,字母l的个数: 3

print('列表field中,字母a的个数:',field.count('a'))

C:\python\python.exe C:/python.py/liebiaofangfa.py

列表field中,字母a的个数: 0

listobj=[123,'hello','world',123]listobj=[26,'hello','world',26]print('数字26的个数:',listobj.count(26))

C:\python\python.exe C:/python.py/liebiaofangfa.py

数字26的个数: 2

#统计字符串的个数print('hello个数:',listobj.count('hello'))

hello个数: 1

也可以这样使用

print(['a','b','c','a','e','f','a'].count('a'))

C:\python\python.exe C:/python.py/liebiaofangfa.py

3

还可以这样使用

mix=[[1,3],5,6,[1,3],2]print('嵌套列表中mix中列表[1,3]的个数为:',mix.count([1,3]))

C:\python\python.exe C:/python.py/liebiaofangfa.py

嵌套列表中mix中列表[1,3]的个数为: 2


extend

extend()方法用于在列表的末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)

extend()语法如下;

          list.extend(seq)

    list代表列表,代表元素列表

extend()方法演示:

a=['hello','world']b=['python','is','funny']a.extend(b)print(a)

C:\python\python.exe C:/python.py/liebiaofangfa.py

['hello', 'world', 'python', 'is', 'funny']

和序列相加做一个对比

a=['hello','world']b=['python','is','funny']print(a+b)print(a)

C:\python\python.exe C:/python.py/liebiaofangfa.py

['hello', 'world', 'python', 'is', 'funny']

['hello', 'world']

两个示例中a和b的赋值都是一样的,但是示例1输出a的值和示例2中输出a的值确不一样

extend()和序列相加的主要区别在于:extend()方法修改了被扩展的序列,如前面的a;原始的连接操作会返回一个全新的列表,如上面的示例返回的是一个包涵a和b的副本的新列表,而不会修改原始的变量。

也可以使用分片赋值实现相同的结果

a=['hello','world']b=['python','is','funny']a[len(a):]=bprint(a)

 C:\python\python.exe C:/python.py/liebiaofangfa.py

['hello', 'world', 'python', 'is', 'funny']

输出结果一样的但是没有extend()方法易懂


index

index()方法用于从列表中找出某个值第一个匹配项的索引位置。

index()语法如下:

         list.index(obj) 

         list代表列表,obj代表查找的对象。

index()方法演示:

name=['duyuheng','duzhaoli','xuwei','gaoshuang','changting']print('duyuheng的索引位置为:',name.index('duyuheng'))

C:\python\python.exe C:/python.py/liebiaofangfa.py

duyuheng的索引位置为: 0

print('xuwei的索引位置为:',name.index('xuwei'))

C:\python\python.exe C:/python.py/liebiaofangfa.py

xuwei的索引位置为: 2

搜索一个不存在的字符串

print('chaiergou的索引位置为:',name.index('caiergou'))

C:\python\python.exe C:/python.py/liebiaofangfa.py

Traceback (most recent call last):

  File "C:/python.py/liebiaofangfa.py", line 7, in

    print('chaiergou的索引位置为:',name.index('caiergou'))

ValueError: 'caiergou' is not in list

报错:不在列表中


insert

insert()方法用于从列表中找出某个值的第一个匹配项的索引位置。

insert()语法如下:

         list.insert(index,obj)

         list代表列表,index代表对象obj需要插入的索引位置,obj代表要插入列表中的对象。

insert()方法演示:

num=[1,2,3]print('插入之前的num:',num)

C:\python\python.exe C:/python.py/liebiaofangfa.py

插入之前的num: [1, 2, 3]

num.insert(2,'插入之前在2之后,3之前')print('插入之后的num:',num)

C:\python\python.exe C:/python.py/liebiaofangfa.py

插入之后的num: [1, 2, '插入之前在2之后,3之前', 3]

insert()也可以使用分片赋值的方法实现

例如:

num=[1,2,3]print('插入之前的num:',num)

C:\python\python.exe C:/python.py/liebiaofangfa.py

插入之前的num: [1, 2, 3]

num[2:2]=['插入之前在2之后3之前']print('插入之后的num:',num)

C:\python\python.exe C:/python.py/liebiaofangfa.py

插入之后的num: [1, 2, '插入之前在2之后3之前', 3]

输出的结果和insert()的一样,但是没有insert容易理解。


pop

pop()方法用于移除列表中的一个元素(默认为最后一个元素),并且返回该元素的值。

pop()的语法如下:

         list.pop(obj=list[-1])

         list代表列表,obj为可选择的参数,list[-1]代表要移除列表元素的对象。

pop()方法演示:

field=['hello','world','python','is','funny']#不传参数,默认移除最后一个元素field.pop()print('移除元素后的field:',field)#移除编号为3的元素isfield.pop(3)print('移除元素后的field:',field)

C:\python\python.exe C:/python.py/liebiaofangfa.py

移除元素后的field: ['hello', 'world', 'python', 'is']

移除元素后的field: ['hello', 'world', 'python']

pop()方法是唯一一个即能修改列表又能返回元素值(除了None)的列表方法。

使用pop的方法可以实现一种常见的数据结构――栈

栈的原理,最后放入栈的最先被移除,称为LIFO(Last In First Out),即先进先出。

栈中的放入和移除操作有统一的称谓――入栈(push)和出栈(pop)。

python没有入栈方法,可以使用append方法代替。

pop方法和append方法的操作结果恰好相反。

如果入栈(或追加)刚刚出栈的值,最后的的结果就不会变

例如:

num=[1,2,3]#追加默认出栈的值num.append(num.pop())print('num追加默认出栈值的操作结果',num)

C:\python\python.exe C:/python.py/liebiaofangfa.py

num追加默认出栈值的操作结果 [1, 2, 3]

通过追加默认出栈的值得到的列表和原来的是一样的。


remove

remove()方法用于移除列表中的某个值的第一个匹配项。

remove()语法如下:

          list.remove(obj)

          list代表列表,obj为列表中要移除的对象。

remove()方法演示:

field=['我爱','美丽','姑娘']print('移除前的列表field:',field)

C:\python\python.exe C:/python.py/liebiaofangfa.py

移除前的列表field ['我爱', '美丽', '姑娘']

field.remove('美丽')print('移除后的列表field:',field)

C:\python\python.exe C:/python.py/liebiaofangfa.py

移除后的列表field: ['我爱', '姑娘']

#移除一个不存在的值field.remove('凤姐')print('移除后的列表field:',field)

C:\python\python.exe C:/python.py/liebiaofangfa.py

Traceback (most recent call last):

  File "C:/python.py/liebiaofangfa.py", line 8, in

    field.remove('凤姐')

ValueError: list.remove(x): x not in list

报错:不在列表中

注意:remove是一个没有返回值的原位置元素的变更方法,它修改了列表确没有返回值,与pop方法正好相反。


reverse

reverse()方法用于反向列表中的元素

reverse()的语法如下:

           list.reverse()

list代表列表,该方法不需要传入参数。

reverse()方法演示:

num=[1,2,3]print('列表反转之前的num:',num)

C:\python\python.exe C:/python.py/liebiaofangfa.py

列表反转之前的num: [1, 2, 3]

num.reverse()print('列表反转之后的num:',num)

C:\python\python.exe C:/python.py/liebiaofangfa.py

列表反转之后的num: [3, 2, 1]

该方法改变了列表但不返回值(和前面remove一样)。

如果需要对一个序列进行反向迭代,那么就可以用reverse函数。

这个函数并不返回列表,而是返回一个迭代器(Iterator)对象,可以通过list函数把返回的对象转换为列表。

例如:

num=[1,2,3]print('使用reversed函数翻转结果:',list(reversed(num)))

C:\python\python.exe C:/python.py/liebiaofangfa.py

使用reversed函数翻转结果: [3, 2, 1]

输出结果对原序列进行反向迭代了


sort

sort()对原序列表进行排序,如果指定参数,就会使用该参数指定的比较方法进行排序。

sort()语法如下:

        list.sort(func)

        list代表列表,func为可选参数。如果指定该参数,就会使用该参数的方法进行排序。

sort()方法演示:

num=[2,5,1,4,7]num.sort()print('num调用sort方法后:',num)

C:\python\python.exe C:/python.py/liebiaofangfa.py

num调用sort方法后: [1, 2, 4, 5, 7]

sort方法改变了原来的列表,而不是简单的返回一个已排序的列表副本。

如果用户需要一个排好序的列表副本,同时又保留原有列表不变该怎么实现。

实现的方式是先把num的副本赋值给n,然后对n进行排序如下

num=[2,5,1,4,7]#将列表切片后赋值给nn=num[:]n.sort()print('变量n的结果是',n)print('num的结果是',num)

C:\python\python.exe C:/python.py/liebiaofangfa.py

变量n的结果是 [1, 2, 4, 5, 7]

num的结果是 [2, 5, 1, 4, 7]

进行该操作的时候一定要对原序列进行分片,不要让两个列表指向同一个列表否则两个序列都会被排序。

sort方法有一个同样功能的函数―――sorted函数,该函数可以直接获取列表副本进行排序

例如:

num=[2,5,1,4,7]n=sorted(num)print('变量n的结果是',n)print('num的结果是',num)

C:\python\python.exe C:/python.py/liebiaofangfa.py

变量n的结果是 [1, 2, 4, 5, 7]

num的结果是 [2, 5, 1, 4, 7]

sorted函数可以用于任何序列,返回的结果都是一个列表。

例如:

print(sorted('python'))print(sorted('31745'))

C:\python\python.exe C:/python.py/liebiaofangfa.py

['h', 'n', 'o', 'p', 't', 'y']

['1', '3', '4', '5', '7']


clear

clear()方法用于清空列表,类似于 del [a:]。

clear()语法如下:

         list.clear()

         list代表列表,不需要传入参数

clear()方法演示:

name=['duyuheng','duzhaoli','gaoshuang','xuwei']name.clear()print('name调用clear方法后的结果:',name)

C:\python\python.exe C:/python.py/liebiaofangfa.py

name调用clear方法后的结果: []


copy

copy()方法用于复制列表,类似a[:]。

copy()语法如下:

        list.copy()

  list代表列表,不需要传入参数。

copy()方法演示:

name1=['duyuheng','duzhaoli','gaoshuang','xuwei']name2=name1.copy()print('name2复制的结果:',name2)

C:\python\python.exe C:/python.py/liebiaofangfa.py

name2复制的结果: ['duyuheng', 'duzhaoli', 'gaoshuang', 'xuwei']


高级排序

如果希望元素能按特定的方式进行排序(不是使用sort方法默认的按升序排列元素),就可以自定义比较方法。

sort方法有两个可选参数,即key和reverse。要使用他们就要通过名字指定,我们称之为关键字参数。

示例:

field = ['study','python','is','happy']#按字符串由短到长排序field.sort(key=len)print(field)

C:\python\python.exe C:/python.py/liebiaofangfa.py

['is', 'study', 'happy', 'python']

#按字符串由长到短排序,需要传递两个参数

field.sort(key=len,reverse=True)print(field)

C:\python\python.exe C:/python.py/liebiaofangfa.py

['python', 'study', 'happy', 'is']

可以做排序后逆序

例如:

num=[8,6,1,4,5]num.sort(reverse=True)print(num)

C:\python\python.exe C:/python.py/liebiaofangfa.py

[8, 6, 5, 4, 1]



本文出自 “duyuheng” 博客,谢绝转载!


推荐阅读
  • 本文介绍了如何使用python从列表中删除所有的零,并将结果以列表形式输出,同时提供了示例格式。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • Redis底层数据结构之压缩列表的介绍及实现原理
    本文介绍了Redis底层数据结构之压缩列表的概念、实现原理以及使用场景。压缩列表是Redis为了节约内存而开发的一种顺序数据结构,由特殊编码的连续内存块组成。文章详细解释了压缩列表的构成和各个属性的含义,以及如何通过指针来计算表尾节点的地址。压缩列表适用于列表键和哈希键中只包含少量小整数值和短字符串的情况。通过使用压缩列表,可以有效减少内存占用,提升Redis的性能。 ... [详细]
  • 本文介绍了win7系统休眠功能无法启动和关闭的解决方法,包括在控制面板中启用休眠功能、设置系统休眠的时间、通过命令行定时休眠、手动进入休眠状态等方法。 ... [详细]
  • 如何查询zone下的表的信息
    本文介绍了如何通过TcaplusDB知识库查询zone下的表的信息。包括请求地址、GET请求参数说明、返回参数说明等内容。通过curl方法发起请求,并提供了请求示例。 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • 本文介绍了Composer依赖管理的重要性及使用方法。对于现代语言而言,包管理器是标配,而Composer作为PHP的包管理器,解决了PEAR的问题,并且使用简单,方便提交自己的包。文章还提到了使用Composer能够避免各种include的问题,避免命名空间冲突,并且能够方便地安装升级扩展包。 ... [详细]
author-avatar
zhangjy妍
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有