列表和元祖

列表取值和切片的演示:

strings = ['a','b','c','d','e','f','g']
print(strings[0])  # 从0开始计数,所以第一个元素是0
print(strings[1:4])  # 切片,从起点开始,但是不包括终点
print(strings[4:])  # 缺省终点,则切到结尾
print(strings[:3])  # 也可以缺省起点,则从头开始
print(strings[::2])  #  所以头尾都省了,就是从头到尾。这里加上了步长,因为头尾步长3个参数都省了,那就是打印整个列表print(strings)
print(strings[0:5:2])  # 第三个参数是步长,默认1
print(strings[-2])  # 取倒数第2个
print(strings[-4:-2])  # 永远是从左往右取,所以-4放前面

追加列表、插入列表、修改列表:

strings = ['a','b','c','d','e','f','g']
strings.append('z')  # 在最后追加
print(strings)
strings.insert(1,'i1')  # 插到1的位置
print(strings)
strings[4] = 'D2'  # 修改
print(strings)

删除列表:

strings = ['a','b','c','d','e','f','g']
strings.remove('c')  # 不能删除不存在的成员
print(strings)
strings.pop()  # 缺省参数,删除最后一个
print(strings)
strings.pop(1)  # 如果带了参数,就是删除那一个
print(strings)
del strings[0]  # 也是不能删除不存在的。这里和带参数的pop是一样的
print(strings)

查找元素:

strings = ['a','b','c','d','e','f','g']
strings.append('e')
print(strings.count('e'))  # 返回列表中这个元素出现的次数
print(strings.index('e'))  # 返回列表中这个元素的位置。但是只有第一个匹配项。但是如果没找到会报错
print('f' in strings)  # in 和 not in之前已经学过了。可以做元素是否存在于列表中的判断
print('h' not in strings)

反转、合并、排序,最后清空:

strings = ['a','b','c','d','e','f','g']
print(strings)
strings.reverse()  # 反转列表
print(strings)
strings.extend(['2','!',"AA"])  # 合并列表,直接用+号结果也一样,但是+号有效率问题吧
print(strings)
strings.sort()  # 排序,元素不能混有数字和字符串,否则排序会报错。这里是2是字符
print(strings)  # 排序按ASCII码排,符号,数字,大写,小写。中文字符排最后
strings.clear()  # 清空列表
print(strings)

列表的复制使用.copy()

列表里的元素也可以是另一个列表,下面一起演示

strings = ['a','b','c','d','e','f','g']
strings.insert(2,['A','B','C'])  # 插入一个元素,这个元素是另一个列表
strings2 = strings.copy()  # 复制列表
print(strings2)
strings[0] = 'apple'  # 修改原始表的元素
strings[2][1] = 'BOY'  # 2层列表中的元素是这样表示的
print(strings)
print(strings2)  # 注意1层元素没变,但是2层的元素也变了,虽然之前操作的原始表的元素

列表里每个元素占一个空间,1层的元素这个空间存的就是值,copy的时候就是将这个值复制了。但是二层的情况,在一层的表里也只占1个元素的位置,这里存的值就是下面二层表的内存地址。所以无论在哪张list里修改2层的元素,两张表都会变化。

列表使用赋值=和copy效果是不同的,使用=完全就是复制了内存地址,等于只是给这个列表起了一个别名

strings = ['a','b','c','d','e','f','g']
strings3 = strings
print(strings3)
strings[0] = 'apple'  # 修改原始表的元素
print(strings)
print(strings3)  # 虽然没修改这张表,但是内容和原始表是一样的

所以要向真正的复制一张表,需要import copy 这个模块

import copy
strings = ['a','b','c','d','e','f','g']
strings.insert(2,['A','B','C'])  # 插入一个元素,这个元素是另一个列表
strings2 = copy.copy(strings)  # 和之前的复制列表一样
strings3 = copy.deepcopy(strings)  # 深copy,这个是我们需要的
print(strings2)
print(strings3)
strings[0] = 'apple'  # 修改原始表的元素
strings[2][1] = 'BOY'  # 修改2层里的元素
print(strings)
print(strings2)  # 1层没变,2层还是被修改了
print(strings3)  # 这里的元素完全不受原始表变化的影响

元组和列表差不多,也是存一组数,只不是它一旦创建,便不能再修改,所以又叫只读列表

元组只有count和index这2个方法。

strings1 = ['a','b','c','d','e','f','g']  # 这个是列表list
strings2 = ('a','b','c','d','e','f','g')  # 这个是元祖tuple
print(type(strings1),type(strings2))
print(strings1)
print(strings2)

可以把那种不希望被修改的数据,比如常量、比如连接参数,存放在元组里

enumerate()函数

可以方便的一次获得元素的下标和值,比较实用

strings = ['a','b','c','d']
# 下标和值构成了一个元组
for i in enumerate(strings):print(i)
print('******')
# 这样写,就依次输出了下标和值,而不是以元组的形式出现了
for i,j in enumerate(strings):print(i,j)
print('******')
# 应用的时候还是用index和item,这样意义比较明确。另外可以带上一个参数,指定下标的起始值
for index,item in enumerate(strings,1):print(index,item)

字符串操作

自动填充的函数有点用处,先记一下。否则在需要用的时候很有可能要手动填充。

string = "hello"
print(string.center(10,'='))  # 内容在中间,两边填充
print(string.ljust(10,'='))  # 内容在左边,右边填充
print(string.rjust(10,'='))  # 内容在右边,左边填充

参数1定义了字符串的长度,不足就用参数2的字符填充。

字典

字典是key:value的数据类型

  • 字典是无序的

  • key必须唯一

# 创建字典
dic1 = {}  # 创建一个空的字典
dic2 = {'name':'Bob','job':'engineer','gender':'male'}
print(dic1,dic2)

修改和增加

dic2 = {'name':'Bob','job':'engineer','gender':'male'}
dic2['class'] = 'First'  # 如果key不存在,则增减
dic2['job'] = 'teacher'  # 如果key存在,则修改
print(dic2)

还有一种增加的方法,setdefault,注意下面的参数中间使用的是逗号。只会新增没有的key,不会修改已有的key

dic2 = {'name':'Bob','job':'engineer','gender':'male'}
dic2.setdefault('name','Tom')  # 最后结果,name并不会被修改
dic2.setdefault('class','First')  # 最后结果,增加了class这项
print(dic2)

删除:删除字典内的元素推荐2中方法:

dic2 = {'name':'Bob','job':'engineer','gender':'male'}
dic2.pop('gender')
del dic2['job']
print(dic2)

查找也给了2个方法,推荐用get

dic2 = {'name':'Bob','job':'engineer','gender':'male'}
print('job' in dic2)  # 返回True,返回字典里是否有这个key
print(dic2['job'])  # 返回key的值(Value)。如果key不存在则会报错
print(dic2.get('name'))  # 如果key存在,返回值
print(dic2.get('name2'))  # 如果key不存在,返回None

可以列出所有的key或所有的value

dic2 = {'name':'Bob','job':'engineer','gender':'male'}
print(dic2.values())
print(dic2.keys())

还可以把字典转成列表

dic2 = {'name':'Bob','job':'engineer','gender':'male'}
print(dic2.items())

update,合并更新字典。把参数中的表合并更新到前面的表。没有的key会新增,已有的key和做修改

dic2 = {'name':'Bob','job':'engineer','gender':'male'}
dic3 = {'job':'teacher','class':'First'}
print(dic2)
print(dic3)
dic2.update(dic3)
print(dic2)
print(dic3)

字典初始化:第一个参数是字典的所有的key,第二个参数是所有value的默认值。这里第二个参数不要再嵌套元组或列表这类数据类型,否则默认赋的值将会是这个列表或元素的内存地址,导致所有的value都是关联的同一个值

dictmp = {}
dic = dictmp.fromkeys(['name','job','gender'],'N/A')
print(dic)

转载于:https://blog.51cto.com/steed/1977821

Python自动化开发学习2相关推荐

  1. Python自动化开发学习的第九周----线程、进程、协程

    一.计算机操作系统的简介 手工操作(无操作系统) 1946年第一台计算机诞生--20世纪50年代中期,还未出现操作系统,计算机工作采用手工操作方式. 程序员将对应于程序和数据的已穿孔的纸带(或卡片)装 ...

  2. Python自动化开发学习6

    引子 假设我们要在我们的程序里表示狗,狗有如下属性:名字.品种.颜色.那么可以先定义一个模板,然后调用这个模板生成各种狗. def dog(name,d_type,color):data = {'na ...

  3. Python自动化开发学习13-堡垒机开发

    堡垒机介绍 很多人觉得,堡垒机就是跳板机,这是不全面的.跳板功能只是堡垒机所具备的功能的其中一项.堡垒机还有以下两个至关重要的功能: 权限管理 : 用户使用堡垒机账号登录堡垒机系统.不需要知道别的主机 ...

  4. python自动化办公都能做什么菜-Python自动化开发学习之三级菜单制作

    本文实例为大家分享了Python三级菜单展示的具体代码,供大家参考,具体内容如下 作业需求: (1)运行程序输出第一级菜单 (2)选择一级菜单某项,输出二级菜单,同理输出三级菜单 (3)让用户选择是否 ...

  5. Python自动化开发学习22-Django上

    session 上节已经讲了使用Cookie来做用户认证,但是 Cookie的问题 缺点:敏感信息不适合放在cookie里,敏感信息只能放在服务器端 优势:把部分用户数据分散的存放在每个客户端,减轻服 ...

  6. Python自动化开发学习的第十一周----WEB框架--Django基础

    WEB框架的本质 对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. #!/usr/bin/env python #coding:utf-8imp ...

  7. Python自动化开发学习15-css补充内容

    上节回顾 上一节学习的内容,有一下几点,可以注意一下.或者说推荐这么做. class可以设置多个值-css样式重用 可以给一个标签设置多个class值,这样我们可以为每个class应用一种样式.标签有 ...

  8. Python自动化开发学习的第十一周----WEB基础(jquery)

    jQuery jQuery 库 - 特性 jQuery 是一个 JavaScript 函数库. jQuery 极大地简化了 JavaScript 编程. jQuery 库包含以下特性: HTML 元素 ...

  9. Python自动化开发学习22-Django下(Form)

    Form表单验证 这里不是验证用户名密码是否正确,这部分内容之前已经讲过了.这里要验证的是数据格式,这步验证是在收到请求后先执行的验证.只有数据格式验证通过,才会验证用户名密码是否正确.如果数据格式验 ...

  10. Python自动化开发学习3

    函数 通过函数,可以定义一段代码块,之后通过函数名可以反复调用 定义一个函数: def alert():"打印Hello World"print("Hello World ...

最新文章

  1. 阿里巴巴2014校招笔试错误汇总
  2. 百度地图报错:APP Referer校验失败
  3. LAMP编译安装(一)——安装Apache2.4
  4. 使用腾讯开发平台获取QQ用户数据资料
  5. mysql 命令行执行存储过程_mysql 命令行执行存储过程
  6. 动词ing基本用法_高中英语:非谓语动词 ( 附非谓语口诀)
  7. Allegro走等长线设置
  8. oracle client 客户端 安装 oracle客户端安装
  9. Java保留小数位数两种简单方法
  10. Linux下安装宋体以及微软雅黑字体
  11. 第2关:比较、掩码和布尔逻辑
  12. 让无线路由器告别电源束缚
  13. Android兼容性测试的一些坑
  14. 膜拜!京东大牛彻底讲透Java多线程面试题,看完直怼阿里面试官,堪称吾辈楷模!
  15. 【邱锡鹏-神经网络与深度学习】第一章绪论 知识点汇总
  16. 44 | 答疑(三)
  17. 0.前端简历编写和面试前准备
  18. Rich feature hierarchies for accurate object detection and semantic segmentation
  19. arduino定时器pdf_Arduino基础入门篇18—数字时钟
  20. iOS学习笔记75-NSURLSession使用实战教程

热门文章

  1. 锐界机器人_看着就很酸爽,2.7T V6双涡轮,车则试驾新福特锐界ST
  2. layer的一种用法,页面多选时用地址传递值过多时,用弹出层画一个form表单,然后通过提交表单传值
  3. 每个java程序都至少有一个线程给主线程,java程序在主线程中判断各个子线程状态的操作,该如何解决...
  4. python文本数据增强_CVPR2020场景文字数据增强(纯python实现)
  5. java oracle行锁,Oracle 出现行锁 错误代码 ora-02049
  6. 晶振噪声及杂散_如何判断是否需要使用分立式晶振和振荡器呢?
  7. 文件上传服务器保存形式,78.上传文件及在服务器保存文件到任意路径
  8. 青稞大义 -RISV-V
  9. 基于 RT-Thread的麦克纳姆轮小车循迹运动控制算法开发和研究
  10. 基于2SK4037的射频功率放大电路实验