这周开始学习Python了,之前多多少少也接触过一些,但是一些基础的东西没有详细了解过,这次可以好好打一下基础,主要就是数据结构方面。
数据结构【列表、字典、元组、集合】
1) 列表(用方括号括起来)
num = [1,2,3] # 索引0,1,2,3
sum(num) # 求和返回6
len(num) # 列表元素个数返回3
列表的增删改查
查:
num[0]
返回第一个元素1
num[-1]
返回最后一个元素3
num[0:2] # 左闭右开,即查找第0个和第1个元素
返回第一个和第二个元素[1,2]
num[1:] # 查找第一个到最后一个元素
返回[2,3]
num[:3] # 查找第0个到第2个元素
返回[1,2,3]
num[-2:]
返回[2,3]
num[:1]
返回[1]
增:【insert、append、拼接】
num.insert(1,4) # 在索引1的前面位置插入4
返回[1,4,2,3]
num.insert(3,5) # 在索引3的前面位置插入5
返回[1,4,2,5,3]
num.append(6) # 在num最后插入6
返回[1,4,2,5,3,6]
num.insert(6,8) # 在num最后插入8
返回[1,4,2,5,3,6,8]
num.append([1,2]) # 在num最后插入一个列表
返回[1,4,2,5,3,6,8,[1,2]]
append一次只能插入一个数,插入多个数的方法
num + [8,9]
返回[1,4,2,5,3,6,8,8,9],但是这种方法并没有改变num对象,如果需要改变num对象,需要对num进行赋值,即
num = num + [8,9],此时的num变成[1,4,2,5,3,6,8,8,9]。
删:【del(按索引)、pop(按索引)、remove(按元素)】
del num[索引] # 删除该索引位置的值
num.pop() # 默认删除列表末尾元素
num.pop(1) # 删除索引是1的值, #一次只能删一个
返回[1,2,5,3,6,8,8,9]
num.remove(2) # 删除元素2
注:
num.remove()只删除第一个指定的值,如果要删除的值在列表中出现多次,就需要用循环来判断是否删除了这样的值
改:【直接修改索引位置的值】
num[5] = 4#把索引为5的值改为4
返回[1,2,5,3,6,4,8,9]
多维列表
info = [[‘nn’,’kk’,’ll’],[12,23,34]]
info[0][1]
返回’kk’
row = [0]3
返回[0,0,0]
[row]4
返回[[0,0,0],[0,0,0],[0,0,0],[0,0,0]]
排序:【sort(永久性)、sorted(临时性)】
guest = ['ch', 'ah', 'ff', 'bf', 'qm', 'mm']
print(sorted(guest))
返回['ah', 'bf', 'ch', 'ff', 'mm', 'qm']
此时,原guest不变
guest.sort()
print(guest)
返回['ah', 'bf', 'ch', 'ff', 'mm', 'qm']
guest.reverse()
print(guest)
返回['qm', 'mm', 'ff', 'ch', 'bf', 'ah'](按列表元素顺序从末尾反推到前面)
2) 元组【注:元组元素无法修改】
用小括号括起来()
a = (1, 2)
a[0] = 3
返回错误‘tuple' object does not support item assignment
3) 字典,用中括号,键值对形式(注意get和setdefault函数)
a = {'name':‘nn','age':23 }
a[‘name’]
返回’nn’
a.pop(‘name’)
a[‘name’]= 'nn'
a.get(‘name’,’kk’)
返回’nn’
a.get(‘nam’,1) #查找nam,如果存在返回相应值,不存在返回第二个参数值
返回1
a.setdefault(‘sex’,’male’) #查找第一个参数,找得到就返回相应值,找不到就添加新值
返回male
set(a)
返回{‘name’,’age’,’sex’}
4) 集合,可以用大括号或者set函数构建,不重复元素
注:集合不支持索引,查询集合数据,可以先list(集合)再用索引查询
a = [1,2,3,3,4]
b = [2,3,4]
set(a)
返回{1,2,3,4} #去重
set(a) & set(b) #交集
返回{2,3,4}
set(a) | set(b) #并集
返回{1,2,3,4}
set(a) - set(b) #a有b没有
返回{1}
{1,2} < a #{1,2} # 是不是a的子集
返回True
a ^ b #不同时包含于a和b的值
返回{1,4}
增:【add和update函数】
set(a).add(‘jj’)
返回{1,2,3,4,’jj’}
set(a).update({5,6},[7,8],(9,10)) #参数可以多个,比如 集合 列表 元组都可以
返回{1,2,3,4,’jj’,5,6,7,8,9,10}
删:【remove、discard、pop】
a.remove(‘jj’)
返回{1,2,3,4,5,6,7,8,9,10}
a.remove(‘pp’) #不存在会报错
返回报错keyerror
a.discard(99) #返回None,不会报错
a.pop() #不填参数值,随机删除元素
返回3,即删除3
此时的a为{1,2,4,5,6,7,8,9,10}
len(a)
返回9
8 in a
返回True
最后是关于Python中的一些个人容易忽视的地方:
1)引号【单引号、双引号、三引号】的用法
单引号和双引号区别不大,当字符串里面有单引号时,外面用双引号,不然系统会按单引号顺序识别字符串,会报错。
'hello 'nan',hello 'uu''#系统识别为'hello ' nan ',hello ' uu ' ',识别不出nan和uu 报错。
print(“hello 'nan',hello 'uu'”)
返回hello 'nan',hello 'uu'
print('''hello “nan”,hello 'uu'''')# 当字符串中同时包含单双引号时,三引号可以作为字符串的边界
返回hello “nan”,hello 'uu'
print('''hello “nan”,
hello 'uu'''')# 三引号还可以处理换行数据
返回
hello “nan”,
hello 'uu'
print(""'b")# 转义字符,表示单双引号不是字符串的边界,只是单纯的引号
返回"'b
2)运算符优先级
(1 < 2) + 1
返回2,(1 < 2)返回True, True在进行数值计算时表示1,False表示0。
1 < 2 + 1
返回True,去掉括号之后的结果,原因在于 +的计算优先于<,先计算2+1为3,再进行1<3, 返回True
3)列表的复制与赋值
列表的复制 list[:],复制之后和原列表是两个对象,指向的是 两个list。
list2 = list1,将list1 赋值给list2,实际上两个变量指向的是 同一个表,修改其中一个列表,两个变量都会改变。
4) 字符串和元组不可变。
Q:为什么同样是变量.方法的形式,上面那个删除空白不是永久性的,还要重新赋值原变量内容才会改变,而下面那个的修改是永久性的
因为字符串是不可变对象,列表是可变对象。
5) 在进行for循环前,需要确定列表是否为空,空列表不遍历。
Q:为什么第一个当user为空列表时,返回的是None,不是we need to find some users,第二个空字符串却可以
因为不遍历空列表,确实item还是之前循环的最后一个值,说明这次for循环根本没有执行。
6)一些小细节
--Python中的None表示缺失,但不等于0,type(None)返回NoneType;
''表示值为空,type('')返回str,表示''在Python中的数据类型是字符串。
--检查字符串是否相等,考虑大小写。
--Python中将{}构建的对象,默认为字典,不是集合。
--Python不关心键值对的存储顺序,只跟踪键和值之间的关联关系。
-- 遍历字典,默认遍历的是字典的键。