Python字典操作总结
字典相对于列表,查找速度快,不会随着元素增多而变慢,时间复杂度O(1),并且字典是另一种可存储任意类型对象。
字典中存储的元素都是键值对(key:value),键值之间用冒号(:)分割, 每个字典元素(键值对)之间用逗号(,)分割, 整个字典包括在花括号 {} 中。
{key1:value1,key2:value2,key3:value3}
字典的key是唯一的,并且可以是任意的不可变对象(int、str、bool、tuple ...),但是一般我们都使用str作为字典的key。字典的值不需要唯一, 可以为任何的数据类型,字典的key不能重复的,否则后边的会替换到前边的值。
1.元素访问
有两种访问元素的方式
直接通过key来获取, 如果key不存在,则会抛出错误。
使用 get 方法来根据键获得值, key不存在则默认返回 None,返回值也可自定义。
d = {'name': 'Tom', 'age': 18, 'gender': 'male'}
#使用key获取
print(d['name'])
#使用get方法获取
print(d.get('name'))
print(d.get('weight',"170"))
2.删除清空元素
使用 pop 方法根据 key 来删除字典中的元素。
del 删除字典或指定的键值对。
使用clear清空元素。
d = {'name': 'Tom', 'age': 18, 'gender': 'male'}
# 删除某个key指定的元素
d.pop('name')
del d['age']
#删除整个字典
del d
# 清空字典
d.clear()
3.新增或修改元素
(有则更新,无则新增)
直接通过key来进行修改或者新增,当key存在为修改,键不存在, 默认为新增元素。
d = {'name': 'Tom', 'age': 18, 'gender': 'male'}
d['name'] = 'Lily'#修改元素
d['weight']=180#新增元素,使用update可以批量更新
4.遍历元素
字典是非序列式容器, 无法通过逐个元素获取, 需要先将字典转换成类似列表的形式, 再对其进行遍历。
1.通过字典的 keys 方法,获得字典key的列表, 然后根据key进行遍历。
d = {'name': 'Tom', 'age': 18, 'gender': 'male'}
for k in d.keys():
print(k,d[k])
输出:
name Tom
age 18
gender male
2.通过字典的 values 方法,获得字典值的列表。
d = {'name': 'Tom', 'age': 18, 'gender': 'male'}
for value in d.values():
print(value)
3.通过字典的 items 方法,返回可迭代对象,内部是元组,元组有2个数据,一个是字典key,一个是字典的value
d = {'name': 'Tom', 'age': 18, 'gender': 'male'}
for item in d.items():
print(item)
输出:
('name', 'Tom')
('age', 18)
('gender', 'male')
Python列表操作总结
1.列表添加元素
列表中可以使用append、insert、extend方法实现元素的添加。
append会把新元素添加到列表末尾
A = ["a", "b", "c"]
A.append("d")
print(A)
输出
['a', 'b', 'c', 'd']
insert(index, object) 在指定位置index前插入元素object
A = ["a", "b", "c"]
A.insert(0, "d")
print(A)
输出
['d', 'a', 'b', 'c']
通过extend可以将另一个集合中的元素逐一添加到列表中(合并)
A = [1, 2]
B = [3, 4]
A.extend(B)
print(A)
输出
[1, 2, 3, 4]
2.列表删除元素
列表中使用方法del、pop、remove实现元素删除
del:根据下标进行删除
list01=["python","java","go"]
del list01[2]
print(list01)
输出
['python', 'java']
pop:弹出,删除最后一个元素(默认删除索引为-1的数据)
list01=["python","java","go"]
list01.pop()
print(list01)
list01.pop(1)
print(list01)
输出
['python', 'java']
['python']
remove:用于移除列表中第一个匹配项
list01=["python","java","go"]
list01.remove("java")
print(list01)
输出
['python', 'go']
3.列表元素的修改
列表可以通过指定下标来访问元素,也可以通过指定列表下标赋值。
fruits = ["apple", "banana", "cherry"]
fruits[-1]="pear"
print(fruits)
输出
['apple', 'banana', 'pear']
4.查找元素
所谓的查找,就是看看指定的元素是否存在,列表中关于查找的方法主要有如下几种:in, not in, index, count
in, not in
- in(存在),如果存在那么结果为true,否则为false
- not in(不存在),如果不存在那么结果为true,否则false
namelist = ['xiaoMing','xiaoZhang','xiaoHua']
print("xiaoMing" in namelist)
print("xiaoMing" not in namelist)
输出
True
False
index:从左到右查找,返回符合条件的第一个元素的索引,没有找到,则报错
namelist = ['xiaoMing', 'xiaoZhang', 'xiaoHua']
print(namelist.index("xiaoMing"))
print(namelist.index('xiaoZhang', 0, 2)) # 指定范围,左闭右开
输出
0
1
count:返回要统计的元素在列表中的个数
A = ["a", "b", "c","a","a"]
print(A.count("a"))
输出
3
5.列表的排序
sort方法是将list按ASCII码排列,默认为由小到大,参数reverse=True可改为倒序,由大到小。
sorted()不会改变原来的list,而是会返回一个新的已经排序好的list
sort()方法仅仅被list所定义,sorted()可用于任何一个可迭代对象,其会返回none
A = [5, 1, 4, 2, 3]
A.sort()# 默认从小到大排序
print(A)
A.sort(reverse=True) # 从大到小排序
print(A)
输出
[1, 2, 3, 4, 5]
[5, 4, 3, 2, 1]
6.列表的遍历
namelist = ['xiaoMing','xiaoZhang','xiaoHua']
for name in namelist:
print(name)
7.列表的切片操作
切片操作(slice)可以从一个列表中获取子列表(列表的一部分)。我们使用一对方括号、起始偏移量start、终止偏移量end 以及可选的步长step 来定义一个分片。切片使用 索引值 来限定范围,从一个大的序列 中切出小的序列。
使用方法: 列表[开始索引:结束索引:步长]
- 开始索引、 结束索引指定的区间属于左闭右开型 [开始索引, 结束索引),所以不包含索引结束元素。
- 如果索引从0开始,开始索引数字可以省略,但冒号不能省略。到末尾结束,结束索引数字可以省略,冒号不能省略
- 正索引从0开始,负索引从-1开始。
testlist = ['a','b','c','d','e']
print(testlist[:])#整个列表
print(testlist[3:])#从testlist[3]到结尾
print(testlist[:3])#从开始到testlist[3]
print(testlist[1:3:1])#从第2个到第3个元素,步长1
print(testlist[:-1])#从开始到倒数第2个元素
print(testlist[-2:])#从倒数第2个元素到结尾
print(testlist[::-1])#列表逆序
输出
['a', 'b', 'c', 'd', 'e']
['d', 'e']
['a', 'b', 'c']
['b', 'c']
['a', 'b', 'c', 'd']
['d', 'e']
['e', 'd', 'c', 'b', 'a']
Python字符串操作大全
Python中字符串的定义:由Unicode码点组成的不可变序列(Strings are immutable sequences of Unicode code points)。
Python内置函数提供了强大的字符串的使用方法,熟练掌握常见的方法,对于数据处理、面试、笔试都非常有用。
dir(str)['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__','__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
首先,字符串是一种序列,所以支持切片和索引操作,具体可以看这篇文章Python基础之数据类型详解。
下面是常见的内建函数用法总结:
s="hello testers !"
print(s.replace('hello','hi')) #输出hi testers !
s="hello testers !"
print(s.split()) #输出['hello', 'testers', '!']
print(s.partition('testers')) #输出('hello ', 'testers', ' !')
s=" hellotesters! "print(s.strip()) #输出hellotesters!
print(s.rstrip()) #输出 hellotesters!
print(s.lstrip()) #输出hellotesters!
s1="hellotesters!"
s2="HELLO TESTERS!"
s3="Hello Testers!"
s4=s1="hello testers!"
print(s1.upper()) #输出HELLO TESTERS!
print(s2.lower()) #输出hello testers!
print(s3.swapcase()) #输出hELLO tESTERS!
print(s1.capitalize()) #输出Hello testers!
print(s4.title()) #输出Hello Testers!
s1="hello testers!"
print(s1.count('l')) #输出2
print(s1.find('hello')) #输出0
print(s1.rfind('testers!')) #输出6
s1="hellotesters!1234567890"
s2="hellotesters"
s3="1234567890"
s4="HELLOTESTERS"
print(s1.isalnum()) #输出False
print(s2.isalpha()) #输出True
print(s3.isdigit()) #输出True
print(s4.isupper()) #输出True
print(s2.islower()) #输出True