Python自动化开发学习2

简介:

列表和元祖

列表取值和切片的演示:

1
2
3
4
5
6
7
8
9
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放前面

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

1
2
3
4
5
6
7
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)

删除列表:

1
2
3
4
5
6
7
8
9
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)

查找元素:

1
2
3
4
5
6
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)

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

1
2
3
4
5
6
7
8
9
10
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()

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

1
2
3
4
5
6
7
8
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效果是不同的,使用=完全就是复制了内存地址,等于只是给这个列表起了一个别名

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

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

1
2
3
4
5
6
7
8
9
10
11
12
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个方法。

1
2
3
4
5
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()函数

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

1
2
3
4
5
6
7
8
9
10
11
12
strings  =  [ 'a' , 'b' , 'c' , 'd' ]
# 下标和值构成了一个元组
for  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)

字符串操作

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

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

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

字典

字典是key:value的数据类型

  • 字典是无序的

  • key必须唯一

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

修改和增加

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

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

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

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

1
2
3
4
5
6
dic2  =  { 'name' : 'Bob' ,
         'job' : 'engineer' ,
         'gender' : 'male' }
dic2.pop( 'gender' )
del  dic2[ 'job' ]
print (dic2)

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

1
2
3
4
5
6
7
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

1
2
3
4
5
dic2  =  { 'name' : 'Bob' ,
         'job' : 'engineer' ,
         'gender' : 'male' }
print (dic2.values())
print (dic2.keys())

还可以把字典转成列表

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

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

1
2
3
4
5
6
7
8
9
10
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都是关联的同一个值

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















本文转自骑士救兵51CTO博客,原文链接:http://blog.51cto.com/steed/1977821,如需转载请自行联系原作者

相关文章
|
2天前
|
运维 Shell Python
Shell和Python学习教程总结
Shell和Python学习教程总结
|
2天前
|
Python
Python从入门到精通:深入学习面向对象编程——2.1.2继承、封装和多态的概念
Python从入门到精通:深入学习面向对象编程——2.1.2继承、封装和多态的概念
|
2天前
|
开发框架 前端开发 数据库
Python从入门到精通:3.3.2 深入学习Python库和框架:Web开发框架的探索与实践
Python从入门到精通:3.3.2 深入学习Python库和框架:Web开发框架的探索与实践
|
2天前
|
数据采集 数据可视化 数据处理
Python从入门到精通的文章3.3.1 深入学习Python库和框架:数据处理与可视化的利器
Python从入门到精通的文章3.3.1 深入学习Python库和框架:数据处理与可视化的利器
|
2天前
|
存储 网络协议 关系型数据库
Python从入门到精通:2.3.2数据库操作与网络编程——学习socket编程,实现简单的TCP/UDP通信
Python从入门到精通:2.3.2数据库操作与网络编程——学习socket编程,实现简单的TCP/UDP通信
|
2天前
|
测试技术 API 网络架构
Python的api自动化测试 编写测试用例
【4月更文挑战第18天】使用Python进行API自动化测试,可以结合`requests`库发送HTTP请求和`unittest`(或`pytest`)编写测试用例。以下示例: 1. 安装必要库:`pip install requests unittest` 2. 创建`test_api.py`,导入库,定义基础URL。 3. 创建继承自`unittest.TestCase`的测试类,包含`setUp`和`tearDown`方法。 4. 编写测试用例,如`test_get_users`,检查响应状态码和内容。 5. 运行测试:`python -m unittest test_api.py`
12 2
|
2天前
|
JSON 测试技术 API
Python的Api自动化测试使用HTTP客户端库发送请求
【4月更文挑战第18天】在Python中进行HTTP请求和API自动化测试有多个库可选:1) `requests`是最流行的选择,支持多种请求方法和内置JSON解析;2) `http.client`是标准库的一部分,适合需要低级别控制的用户;3) `urllib`提供URL操作,适用于复杂请求;4) `httpx`拥有类似`requests`的API,提供现代特性和异步支持。根据具体需求选择,如多数情况`requests`已足够。
9 3
|
3天前
|
数据采集 存储 人工智能
【Python+微信】【企业微信开发入坑指北】4. 企业微信接入GPT,只需一个URL,自动获取文章总结
【Python+微信】【企业微信开发入坑指北】4. 企业微信接入GPT,只需一个URL,自动获取文章总结
13 0
|
3天前
|
人工智能 机器人 API
【Python+微信】【企业微信开发入坑指北】3. 如何利用企业微信API给微信群推送消息
【Python+微信】【企业微信开发入坑指北】3. 如何利用企业微信API给微信群推送消息
6 0
|
3天前
|
缓存 人工智能 API
【Python+微信】【企业微信开发入坑指北】2. 如何利用企业微信API主动给用户发应用消息
【Python+微信】【企业微信开发入坑指北】2. 如何利用企业微信API主动给用户发应用消息
7 0

热门文章

最新文章