这篇文章开始介绍Python中的容器。Python容器包括列表、元组、集合与字典。这些数据结构中都涉及到很多的方法,这里对比较常用的一些方法进行介绍,不用每个方法都记住,熟悉常用的即可。

首先,我们先来看列表。

一、列表的创建方式

  1. # -*- coding: utf-8 -*-
  2. # __author : Demon
  3. # date : 1/16/18 8:19 PM
  4. # 列表的创建
  5. empty_list_01 = [] # 创建一个空的列表
  6. empty_list_02 = list() # 创建一个空的列表
  7. num_list = [1, 2, 3, 4, 5] # 创建一个数字列表
  8. str_list = ['a', 'b', 'c'] # 创建一个字符串列表
  9. mix_list = [1, 'a', 'abc'] # 一个列表中可包含元素类型不是固定的
  10. nest_list = [num_list, str_list, mix_list] # 列表可以嵌套
  11. print(num_list) # [1, 2, 3, 4, 5]
  12. print(str_list) # ['a', 'b', 'c']
  13. # 由打印结果可以看出列表的存储是有顺序的
  14. # 即怎么存的就怎么取
  15. print(num_list[0]) # 列表接受下标访问,类似于JAVA中的数组 1
  16. print(num_list[1]) # 列表接受下标访问,类似于JAVA中的数组 2
  17. print(num_list[2]) # 列表接受下标访问,类似于JAVA中的数组 3
  18. print(num_list[3]) # 列表接受下标访问,类似于JAVA中的数组 4
  19. print(num_list[4]) # 列表接受下标访问,类似于JAVA中的数组 5
  20. # 一旦超出长度,就会抛出异常
  21. # print(num_list[5]) # IndexError: list index out of range

二、列表中的常用操作

  1. # -*- coding: utf-8 -*-
  2. # __author : Demon
  3. # date : 1/16/18 8:19 PM
  4. # 1. 列表的循环方式【重要】
  5. num_list = [1, 2, 3, 4, 5] # 创建一个数字列表
  6. for num in num_list:
  7. print(num, end="") # 123456
  8. print()
  9. # 2. 求长度
  10. num_list = [1, 2, 3, 4, 5] # 创建一个数字列表
  11. print(len(num_list)) # 5
  12. # 3. 判断列表是否为空【重要】
  13. empty_list = list()
  14. num_list = [1, 2, 3]
  15. # 利用非0即True的原则【推荐方法】
  16. if not empty_list: # 如果列表为空
  17. print("The list is empty")
  18. else:
  19. print("The list is not empty")
  20. # 利用长度
  21. if not len(num_list):
  22. print("The list is empty")
  23. else:
  24. print("The list is not empty")
  25. # 4. 判断元素是否存在【重要】
  26. num_list = [1, 2, 3]
  27. if 2 in num_list:
  28. print("in")
  29. else:
  30. print("not in")
  31. # 5. append(ele) 尾端添加元素
  32. empty_list = [] # 创建一个空的列表
  33. for s in "Hello":
  34. empty_list.append(s)
  35. print(empty_list) # ['H', 'e', 'l', 'l', 'o']
  36. # 上述代码也是将字符串转换为列表的一种方式,只是代码比较复杂
  37. # 6. 列表切片的用法,如字符串切片的用法类似【重要】
  38. # 用法 list[start:end:step]
  39. # start可省略,默认值为0
  40. # end可省略,默认为最大长度
  41. # step可省略,默认为1
  42. # 范围是[start, end),即左闭右开
  43. str_list = ['a', 'b', 'c'] # 创建一个字符串列表
  44. # 获取整个list, ['a', 'b', 'c']
  45. print(str_list[::])
  46. print(str_list[0:])
  47. print(str_list[:3])
  48. print(str_list[:200]) # 长度超出时,不会报错
  49. # 获取部分
  50. print(str_list[0:2]) # ['a', 'b']
  51. print(str_list[0:2:2]) # ['a']
  52. # 7.sort排序【重要】
  53. # 注意这个方法没有返回值,是在原列表上进行修改
  54. str_list = ["adfas", "dsdfw", "nklo"]
  55. str_list.sort()
  56. print(str_list) # ['adfas', 'dsdfw', 'nklo']
  57. # 8.insert(pos, ele) 在指定位置插入元素
  58. str_list = ['a', 'b', 'c'] # 创建一个字符串列表
  59. str_list.insert(2, "we") # ['a', 'b', 'we', 'c']
  60. print(str_list)
  61. # 如果位置超出长度,不会报错,会在尾部插入
  62. str_list.insert(20, "we") # [['a', 'b', 'we', 'c', 'we']
  63. print(str_list)
  64. # 9.del(pos) 删除指定位置的元素
  65. # 需要注意这个方法不是通过列表.调用的
  66. # 可以类似理解为,它不是列表这个类中的方法
  67. str_list = ['a', 'b', 'c'] # 创建一个字符串列表
  68. del str_list[0]
  69. print(str_list) # ['b', 'c']
  70. # del str_list[20] # IndexError: list assignment index out of range
  71. # 10.extend(list)或+=合并
  72. num_list = [1, 2]
  73. str_list = ["a", "b"]
  74. print(str_list + num_list) # ['a', 'b', 1, 2]
  75. # 11.remove(ele) 删除指定值
  76. str_list = ['a', 'b', 'c'] # 创建一个字符串列表
  77. str_list.remove("a")
  78. print(str_list) # ['b', 'c']
  79. # str_list.remove("d") # ValueError: list.remove(x): x not in list
  80. # 12.pop(pos) 删除指定位置的元素
  81. str_list = ['a', 'b', 'c'] # 创建一个字符串列表
  82. # str_val = str_list.pop(100) # IndexError: pop index out of range
  83. str_val = str_list.pop(0)
  84. print(str_val) # a
  85. print(str_list) # ['b', 'c']
  86. # 13.reverse() 反转,见练习
  87. # 14.count(ele)方法查看某个元素出现的次数
  88. str_list = ['abc', 'b', 'c', "abc"]
  89. print(str_list.count("abc")) # 2

三、列表的转换

其他形式转列表,采用list(otherType)的方法。可以转列表的类型有:字符串,元组等,如下代码所示:

  1. str_01 = "abc"
  2. print(list(str_01)) # ['a', 'b', 'c']
  3. tuple_01 = (1, 2, 3)
  4. print(list(tuple_01)) # [1, 2, 3]

列表转其他形式,通常看其他形式是怎么支持转换。其中比较灵活的是列表转字符串,采用join的方法,如下代码所示:

  1. str_list = ["a", "b", "c"]
  2. print(",".join(str_list)) # a,b,c
  3. print("".join(str_list)) # abc

列表转字符串需要注意:

  1. join方法不是列表自带的方法,从调用来看,它是字符串里的方法
  2. join方法,如果列表中的元素不是字符串,会报错,如下代码所示:
  1. num_list = [1, 2, 3]
  2. # print("".join(num_list)) # TypeError: sequence item 0: expected str instance, int found

四、常见的练习题

常见的有关列表的练习题:

  1. 列表的反转
  1. num_list = [1, 2, 3]
  2. #方式一:调用列表的reverse()方法
  3. num_list.reverse()
  4. print(num_list) # [3, 2, 1]
  5. # 方式二:使用切片
  6. num_list = [1, 2, 3]
  7. for num in num_list[::-1]:
  8. print(num)
  9. #如果需要[3, 2, 1]这样的格式
  10. num_list = [1, 2, 3]
  11. print("[", end="")
  12. for num in num_list[:0:-1]:
  13. print(num, end=", ")
  14. if not num_list: # 如果列表为空
  15. print("]")
  16. else:
  17. print("%d]" % num_list[0])

2.如何将列表拷贝到别一个列表中

  1. nest_list = [1, 2, 3, ['a', 'b', 'c']]
  2. new_nest_list = nest_list # 直接赋值拷贝
  3. print(new_nest_list) # [1, 2, 3, ['a', 'b', 'c']]
  4. new_nest_list.append("4")
  5. print(new_nest_list) # [1, 2, 3, ['a', 'b', 'c'], '4']
  6. print(nest_list) # [1, 2, 3, ['a', 'b', 'c'], '4']
  7. # 直接赋值的拷贝会影响原来的列表,是一种浅拷贝
  8. nest_list = [1, 2, 3, ['a', 'b', 'c']]
  9. new_nest_list = nest_list[::] # 切片
  10. print(new_nest_list) # [1, 2, 3, ['a', 'b', 'c']]
  11. new_nest_list.append("4")
  12. print(new_nest_list) # [1, 2, 3, ['a', 'b', 'c'], '4']
  13. print(nest_list) # [1, 2, 3, ['a', 'b', 'c']]
  14. nest_list[-1].append("d")
  15. print(new_nest_list) # [1, 2, 3, ['a', 'b', 'c', 'd'], '4']
  16. print(nest_list) # [1, 2, 3, ['a', 'b', 'c', 'd']]
  17. # 使用切片,改变最外层对原列表没有影响,而内层是有影响的。这也是一种浅拷贝
  18. nest_list = [1, 2, 3, ['a', 'b', 'c']]
  19. new_nest_list = nest_list.copy() # 使用copy方法
  20. print(new_nest_list) # [1, 2, 3, ['a', 'b', 'c']]
  21. new_nest_list.append("4")
  22. print(new_nest_list) # [1, 2, 3, ['a', 'b', 'c'], '4']
  23. print(nest_list) # [1, 2, 3, ['a', 'b', 'c']]
  24. nest_list[-1].append("d")
  25. print(new_nest_list) # [1, 2, 3, ['a', 'b', 'c', 'd'], '4']
  26. print(nest_list) # [1, 2, 3, ['a', 'b', 'c', 'd']]
  27. # 使用copy,改变最外层对原列表没有影响,而内层是有影响的。这也是一种浅拷贝
  28. # 如果想要实现深拷贝,需要使用copy模块中的deepcopy方法,详见<python中的深拷贝与浅拷贝>一文

3.列表的排序

列表的简单排序通常使用list.sort()方法。 但是这个sort方法使用会相对比较灵活。它的完整定义如下:

sort(*, key=None, reverse=False)

key指定一个函数名,并且这个函数只能接受一个参数

reverse指定排序的方式

  1. x = ['bc', 'essmm', 'mdsfm', 'ss' ]
  2. x.sort(key=str.lower)
  3. print(x) # ['bc', 'essmm', 'mdsfm', 'ss']
  4. y = [3, 2, 8, 0, 1]
  5. y.sort(reverse=True)
  6. print(y) # [8, 3, 2, 1, 0]

可以发现,使用list.sort()方法进行排序,是调用的列表中自带的方法,并且它是作用于原列表,并没有返回值。如果我们想要得到一个新的排好序的列表,则需要使用到sorted()方法。这个方法十分灵活,后面将再分专题进行介绍。

Python编程笔记 - 列表的更多相关文章

  1. Python编程笔记二进制、字符编码、数据类型

    Python编程笔记二进制.字符编码.数据类型 一.二进制 bin() 在python中可以用bin()内置函数获取一个十进制的数的二进制 计算机容量单位 8bit = 1 bytes 字节,最小的存 ...

  2. Python编程之列表操作实例详解【创建、使用、更新、删除】

    Python编程之列表操作实例详解[创建.使用.更新.删除] 这篇文章主要介绍了Python编程之列表操作,结合实例形式分析了Python列表的创建.使用.更新.删除等实现方法与相关操作技巧,需要的朋 ...

  3. python学习笔记——列表生成式与生成器

    1.列表生成式(List Comprehensions) python中,列表生成式是用来创建列表的,相较于用循环实现更为简洁.举个例子,生成[1*1, 2*2, ... , 10*10],循环用三行 ...

  4. python学习笔记——列表操作

    python列表操作——增 append:追加一条数据到列表的最后 name = ["Zhangsan","XiongDa","Lisi"] ...

  5. Python自学笔记-列表生成式(来自廖雪峰的官网Python3)

    感觉廖雪峰的官网http://www.liaoxuefeng.com/里面的教程不错,所以学习一下,把需要复习的摘抄一下. 以下内容主要为了自己复习用,详细内容请登录廖雪峰的官网查看. 列表生成式 列 ...

  6. Python编程笔记(第三篇)【补充】三元运算、文件处理、检测文件编码、递归、斐波那契数列、名称空间、作用域、生成器

    一.三元运算 三元运算又称三目运算,是对简单的条件语句的简写,如: 简单条件处理: if 条件成立: val = 1 else: val = 2 改成三元运算 val = 1 if 条件成立 else ...

  7. Python编程笔记(第二篇)二进制、字符编码、数据类型

    一.二进制 bin() 在python中可以用bin()内置函数获取一个十进制的数的二进制 计算机容量单位 8bit = 1 bytes 字节,最小的存储单位,1bytes缩写为1B 1KB = 10 ...

  8. python基础笔记-列表

    列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现. 列表的数据项不需要具有相同的类型 创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可. def main(): ...

  9. Python学习笔记----列表、元组和字典的基础操作

    文章目录 一.列表的基本操作 1.1 修改列表中的某个数据 1.2 获取某个元素的返回值(返回的是索引) 1.3 在列表中插入新的元素 1.4 删除列表中的元素 1.5 +和* 二.内置的函数和方法 ...

随机推荐

  1. MPSOC之8——启动及错误处理

    有了BOOT.BIN(fsbl+pmu+atl+uboot).uImage.uramdisk.image.gz,dtb文件,就可以启动了.把上述文件统统拷贝到SD卡,并设置开发板为SD卡启动. 0. ...

  2. C#:StreamReader读取.CSV文件(转换成DataTable)

    using System.Data; using System.IO; /// <summary> /// Stream读取.csv文件 /// </summary> /// ...

  3. 手把手教你用vue-cli搭建vue项目

    手把手教你用vue-cli搭建vue项目 本篇主要是利用vue-cli来搭建vue项目,其中前提是node和npm已经安装好,文章结尾将会简单提到一个简单的例子.使用vue-cli搭建项目最开始我也是 ...

  4. SQL Server-聚焦ROW_NUMBER VS TOP N性能

    前言 抱歉各位,从八月份开始一直在着手写EntityFramework 6.x和EntityFramework Core 2.0的书籍写作,所以最近一直遗漏了对博客的管理,后面会着手于写SQL Ser ...

  5. Django的设计模式

    MVC模式 MVC将应用程序分解为三个组成部分:mode(模型).view(视图).control(控制器),其中: M 管理应用程序的状态(通常存储到数据库中),并榆树改变状态的行为(或者叫&quo ...

  6. 浅谈Unix I/O模型

    关于I/O模型的文章比较多,参考多篇后理解上仍然不太满意,终需自己整理一次,也是编写高吞吐量高性能网络接口模块的基础.这里所说的主要针对网络I/O,近几年面对越来越大的用户请求量,如何优化这些步骤直接 ...

  7. xamarin android listview的用法

    listview也许是用的非常频繁的一个控件之一,下面我写一个xamarin的listview栗子,大家尝一尝xamarin android开发的乐趣.原谅我的大小写吧. listview绑定自定义的 ...

  8. Windows as a Service(1)—— Windows 10服务分支

    前言 作为公司的IT管理员,管理全公司Windows 10操作系统的更新一直是工作中的头疼之处.微软提供了很多方法来帮助我们管理公司的Windows 10更新,比如Windows Server Upd ...

  9. iOS使用带字体图标的UIButton(支持各种方向)

    简书地址:http://www.jianshu.com/p/1c288440754d demo地址:https://github.com/Brances/ZMProject

  10. RSA加解密实现

    RSA是由MIT的三位数学家R.L.Rivest,A.Shamir和L.Adleman[Rivest等1978, 1979]提出的一种用数论构造双钥的方法,被称为MIT体制,后来被广泛称之为RSA体制 ...