可变和不可变类型
如果值改变,但是内存地址不变,证明就是在改变原值,即原值可变
如果值改变,但是内存地址也变了,证明不是在改变原值,而是产生了新的值,即原值不可变
1. 整型 int
# 定义方式
age = 18 # age = int(18)
print(type(age))
# int数据类型转换
res = int(" 18 ")
print(res,type(res))
# 常用操作+内置的方法
# 算数运算+比较运算
## 存一个值
# 不可变类型
2.浮点型float
# 2、定义方式
salary = 3.33 # salary = float(3.33)
# float数据类型转换
res = float(" 1.8 ")
print(res,type(res))
# 3、常用操作+内置的方法
# 算数运算+比较运算
# 存一个值
# 不可变类型
3.字符串 str
3.1定义和类型转换
# 2、定义方式
name = "egon" # name = str("egon")
# str数据类型转换:可以把任意类型都转换成字符串类型
res = str([1,2,3])
print(res,type(res))
# "[1,2,3]"
# 存一个值
# 不可变类型
#有序
3.2 索引
按索引取值(正向取+反向取) :
msg = 'hello world'
print(msg[4])
print(msg[5])
print(msg[-1])
#运行结果
o
d
3.3切片
切片(顾头不顾尾,步长):从一个大字符串中拷贝出一个子字符串
msg = 'hello world'
res1 = msg[1:5:2]
res2 = msg[1:5]
res3 = msg[1:]
res4 = msg[:]
res5 = msg[-1:-4:-1]
res6 = msg[-1::-1]
res7 = msg[::-1] # 将字符串颠倒
print(msg)
print(res1)
print(res2)
print(res3)
print(res4)
print(res5)
print(res6)
print(res7)
#运行结果
hello world
el
ello
ello world
hello world
dlr
dlrow olleh
dlrow olleh
进程已结束,退出代码为 0
3.4长度
#长度len
msg = 'hello world'
print(len(msg))
#运行结果
11
进程已结束,退出代码为 0
3.5 成员运算in和not in
str1 = 'hello python!'
# in:判断hello 是否在 str1里面
'hello' in str1
#运行结果
True
# not in:判断tony 是否不在 str1里面
'tony' not in str1
#运行结果
True
3.6 移除 strip()
name = ' eg on '
print(name.strip())
#运行结果
eg on
进程已结束,退出代码为 0
name = '*****eg on****'
print(name.strip('*'))
#运行结果
eg on
进程已结束,退出代码为 0
msg = "*(&%&%&_+)**&^e*gon*)(^%$$&$"
print(msg.strip('*()&%_+^%$'))
#运行结果
e*gon
进程已结束,退出代码为 0
l1="*****egon*****"
print(l1.strip("*"))#移除两边的*
print(l1.lstrip("*"))#移除左边的*
print(l1.rstrip(("*")))#移除右边边的*
#运行结果
egon
egon*****
*****egon
进程已结束,退出代码为 0
3.7 replace()方法
x = 'a c d e'
print(x.replace(' ','',1))# 替换一次
print(x.replace(' ','')) #默认全部替换
#运行结果
ac d e
acde
3.8 切分 split()
# 6.1 括号内不指定字符,默认以空格作为切分符号
msg = "egon:18:male:10"
res = msg.split(':')
print(res)
#运行结果
['egon', '18', 'male', '10']
# 括号内指定分隔字符,则按照括号内指定的字符切割字符串
# 注意:split切割得到的结果是列表数据类型
3.9拼接 join()
info = ['111', '222', '333', '444']
msg = ":".join(info)
print(msg)
#运行结果
111:222:333:444
3.10 循环
str1='hello world'
for x in str1:
print(x)
#运行结果
h
e
l
l
o
w
o
r
l
d
进程已结束,退出代码为 0
3.11. lower(), upper()
>>> str2 = 'My nAme is tonY!'
>>> str2.lower() # 将英文字符串全部变小写
my name is tony!
>>> str2.upper() # 将英文字符串全部变大写
MY NAME IS TONY!
3.12 格式化输出之format
# format括号内在传参数时完全可以打乱顺序,但仍然能指名道姓地为指定的参数传值,name=‘tony’就是传给{name}
str4 = 'my name is {name}, my age is {age}!'.format(age=18,name='tony')
print(str4)
#运行结果
'my name is tony, my age is 18!'
str4 = 'my name is {name}{name}{name}, my age is {name}!'.format(name='tony', age=18)
print(str4)
#运行结果
'my name is tonytonytony, my age is tony!'
3.13 isdigit()
isdigit() 方法检测字符串是否只由数字组成。
str = "123456";
print str.isdigit();
#运行结果
True
str = "this is string example....wow!!!";
print str.isdigit();
#运行结果
False
4.列表 list
4.1定义和类型转换
#定义方式:在[]用逗号分隔开多个任意类型的元素
l = [111,33.333,"aaaa",[666,7777]] # l = list(...)
print(type(l))
#运行结果
<class 'list'>
#list数据类型转换
res = list("hello")
print(res)
#运行结果
['h', 'e', 'l', 'l', 'o']
# 存多个值
# 有序
# 可变类型
4.2 索引
l = [111,222,333,444,555,666,777]
print(l[0])
print(l[-1])
#运行结果
111
777
4.3、切片
l = [111,222,333,444,555,666,777]
print(l[1:4:1]) # 拷贝
print(l[:])
print(l[::-1])
#运行结果
[222, 333, 444]
[111, 222, 333, 444, 555, 666, 777]
[777, 666, 555, 444, 333, 222, 111]
4.4、长度
l = [111,222,333,444,555,666,777]
print(len(l))
#运行结果
7
4.5 成员运算in和not in
l = [111,222,333,444,555,666,777]
print(333 in l)
#运行结果
True
4.6、追加、插入
#追加append
l = [111,222,333,444,555,666,777]
l.append(888)
print(l)
#运行结果
[111, 222, 333, 444, 555, 666, 777, 888]
#插入insert
l = [111, 222, 333, 444, 555, 666, 777]
l.insert(3, 999999999999)
print(l)
#运行结果
[111, 222, 333, 999999999999, 444, 555, 666, 777]
4.7 删除
l = [111, 222, 333, 444, 555, 666, 777]
#(1)万能删除
del l[1]
print(l)
#运行结果
[111, 333, 444, 555, 666, 777]
# (2) l.remove()
l = [111, 222, 333, 444, 555, 666, 777]
v = l.remove(333)
print(l)
print(v)
#运行结果
[111, 222, 444, 555, 666, 777]
None
# (3) l.pop()
l = [111, 222, 333, 444, 555, 666, 777]
v = l.pop(2)
print(l)
print(v)
#运行结果
[111, 222, 444, 555, 666, 777]
333
4.8 循环
# 7、循环
l = [111,222,333,444]
for i in l:
print(i)
#运行结果
111
222
333
444
4.9 大小比较 sort()
l1 = [111, -3, 99, 27]
l1.sort() #默认从小到大
print(l1)
#运行结果
[-3, 27, 99, 111]
l1 = [111, -3, 99, 27]
l1.sort(reverse=True )
print(l1)
#运行结果
[111, 99, 27, -3]
4.10 颠倒列表
# 7.reverse()颠倒列表内元素顺序
>>> l = [11,22,33,44]
>>> l.reverse()
>>> l
[44,33,22,11]
5.元组 tuple
# ======================================元组基本使用======================================
# 1、用途:元组就是一种不可变的列表
# 2、定义方式:在()内用逗号分割开多个任意类型的元素
# t = (11,11.333,"aaa",[666,777]) # t = tuple()
# tuple数据类型转换
# print(tuple("hello"))
# 3、常用操作+内置的方法
# 优先掌握的操作:
# 1、按索引取值(正向取+反向取):只能取
# 2、切片(顾头不顾尾,步长)
# 3、长度
# 4、成员运算in和not in
# ======================================该类型总结====================================
# 存多个值
# 有序
# 不可变
6.字典 dict
定义方式:在{}内用逗号分割开多个元素,每个元素都是key:value的形式 其中value可以是任意类型,而key必须是不可变类型,通常是字符串类型
定义形式
dic = {1:111111,33.33:"aaa",(1,2,3):'bbbb'} # dic = dict(...)
# dict数据类型转换
dic = dict([('name','egon'),('age',18)])
print(dic)
#运行结果
{'name': 'egon', 'age': 18}
6.1常用操作+内置的方法
# 1、按key存取值:可存可取
# dic = {'name': 'egon', 'age': 18}
# print(dic['name'])
# print(dic['name1'])
# print(dic.get('name'))
# print(dic.get('name1'))
# dic['gender'] = 'male'
# print(dic)
# dic = {'name': 'egon', 'age': 18,'name':"tom",'name':'lili'}
# print(dic)
# 2、长度len
# dic = {'name': 'egon', 'age': 18}
# print(len(dic))
# 3、成员运算in和not in
# dic = {'name': 'egon', 'age': 18}
# print('name' in dic)
# 4、删除
# 万能删除
# del dic['name']
# print(dic)
# dic.pop()
# v = dic.pop('name')
# print(v)
# dic.popitem()
# res = dic.popitem()
# print(res)
# 5、键keys(),值values(),键值对items()
"""
>>> dic = {'name': 'egon', 'age': 18}
>>>
>>>
>>> dic.keys()
['age', 'name']
>>>
>>> dic.values()
[18, 'egon']
>>>
>>> dic.items()
[('age', 18), ('name', 'egon')]
"""
# 6、循环
# dic = {'name': 'egon', 'age': 18}
# # for k in dic.keys():
# # print(k)
#
# # for k in dic:
# # print(k)
#
# # for v in dic.values():
# # print(v)
#
# for k,v in dic.items():
# print(k,v)
需要掌握的操作
1.get()
>>> dic= {'k1':'jason','k2':'Tony','k3':'JY'}
>>> dic.get('k1')
'jason' # key存在,则获取key对应的value值
>>> res=dic.get('xxx') # key不存在,不会报错而是默认返回None
>>> print(res)
None
>>> res=dic.get('xxx',666) # key不存在时,可以设置默认返回的值
>>> print(res)
666
# ps:字典取值建议使用get方法
2.pop()
>>> dic= {'k1':'jason','k2':'Tony','k3':'JY'}
>>> v = dic.pop('k2') # 删除指定的key对应的键值对,并返回值
>>> dic
{'k1': 'jason', 'kk2': 'JY'}
>>> v
'Tony'
3.popitem()
>>> dic= {'k1':'jason','k2':'Tony','k3':'JY'}
>>> item = dic.popitem() # 随机删除一组键值对,并将删除的键值放到元组内返回
>>> dic
{'k3': 'JY', 'k2': 'Tony'}
>>> item
('k1', 'jason')
4.update()
# 用新字典更新旧字典,有则修改,无则添加
>>> dic= {'k1':'jason','k2':'Tony','k3':'JY'}
>>> dic.update({'k1':'JN','k4':'xxx'})
>>> dic
{'k1': 'JN', 'k3': 'JY', 'k2': 'Tony', 'k4': 'xxx'}
5.fromkeys()
>>> dic = dict.fromkeys(['k1','k2','k3'],[])
>>> dic
{'k1': [], 'k2': [], 'k3': []}
6.setdefault()
# key不存在则新增键值对,并将新增的value返回
>>> dic={'k1':111,'k2':222}
>>> res=dic.setdefault('k3',333)
>>> res
333
>>> dic # 字典中新增了键值对
{'k1': 111, 'k3': 333, 'k2': 222}
# key存在则不做任何修改,并返回已存在key对应的value值
>>> dic={'k1':111,'k2':222}
>>> res=dic.setdefault('k1',666)
>>> res
111
>>> dic # 字典不变
{'k1': 111, 'k2': 222}
7.集合
集合、list、tuple、dict一样都可以存放多个值,但是集合主要用于:去重、关系运算
集合(set)是一个无序的不重复元素序列。
可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
# 2、定义方式:在{}内用逗号分隔开多个元素,集合元素的特点如下
# 1、集合内元素不能重复
# 2、集合内的元素必须是不可变类型
# 3、集合内的元素无序
集合的运算
# pythons = {'张三', '李四', '王五', '刘6', 'egon', 'lili', '李建国'}
# linuxs = {'铁蛋', '铜蛋', '钢弹', 'egon', '狗蛋', 'lili'}
# print(pythons|linuxs) #并集
# print(pythons&linuxs) #交集
# print(pythons-linuxs)#差集
#print(pythons^linuxs)# 对称差集(^) 除了两边同时拥有的元素
父子集
# 6.父集:一个集合是否包含另外一个集合
# 6.1 包含则返回True
>>> {1,2,3} > {1,2}
True
>>> {1,2,3} >= {1,2}
True
# 6.2 不存在包含关系,则返回False
>>> {1,2,3} > {1,3,4,5}
False
>>> {1,2,3} >= {1,3,4,5}
False
# 7.子集
>>> {1,2} < {1,2,3}
True
>>> {1,2} <= {1,2,3}
True
集合去重复有局限性
# 1. 只能针对不可变类型
# 2. 集合本身是无序的,去重之后无法保留原来的顺序