Python学习之路(四)数据类型

再识变量

1、变量就是存放数据的容器。我们定义一个变量其实就是把这个数据放在这个容器里面。
2、python的数据类型

  • 整型 int
  • 浮点型 float
  • 布尔型 bool。True真,False假。注意是首字母大写
  • 字符串 str
  • 列表 list
  • 元组 tuple
  • 字典 dictionary
  • 集合 set
  • 使用type 判断数据类型:type(x)判断x变量的数据类型
a = '123'
b = 123

print(type(a))
print(type(b))

3、不同类型变量之间的计算

  • 数字型变量(整数、浮点型、bool型)可以直接计算,bool型True是1,False 是0
a = 3
b = 2.4
c = True
d = False
print(a+b+c)
print(a*b*d)
print(type(a*b*d))# 注意有浮点型参与运算时 结果是浮点型
  • 字符串类型 使用+拼接字符串。使用*表示多个字符串重复
a = '123'
b = '###'
c = (a+b)*3
print(c)
print(type(c))
  • 类型转换,不同类型的数据不能进行计算,如下:
a = '123'
b = 123
# print(a+b)#会报错
print(int(a)+b)# 需要把字符串转换成整型

各种数据都可以进行类型转换如下:

a = ['1',2,3]#定义列表
b = (123,345)#定义元组
print(type(set(a)))#列表转成集合
print(type(list(b)))#元组转出列表
print(type(tuple(a)))#列表转出元组
列表(list)

1、相当于php里面的索引数组,用 [ ]定义,数据 之间使用 , 分隔
2、可以保存不同的数据类型
3、常规操作,如下图所示:
在这里插入图片描述

  • 定义列表
lang = ['python','php','c','c++','go']
  • 索引值:正数从0开始(左边第一个),负数从-1开始(右边第一个)
print(lang[0]) 结果输出python
print(lang[-1]) 结果输出go
  • 列表添加
lang = ['python','php','c','c++','go']
lang.insert(2,'node')#位置2的地方插入 既 c 前面
lang.append('js')#末尾添加数据
l2 = ('aaa','bbb')#列表2
lang.extend(l2)#添加的数据 可以使用for循环遍历的,可以是列表或是元组
  • 列表的修改
lang[2] = 'c#'    #修改
lang[-1] = 'cpp'  #修改
  • 列表删除
lang.remove('php')
lang.pop(1)#删除指定索引
lang.pop()#删除列表末尾的数据
lang.clear()#清空列表
del lang[0]#删除列表索引
  • 列表的统计
print(len(lang))#打印列表个数
print(lang.count('php'))#统计 值 在列表中出现的次数
  • 列表排序:只有列表里面数据的类型一致才可以排序
lang.sort()#升序排序 
lang.sort(reverse=True)#降序排序
lang.reverse()#列表反转
  • 列表遍历
lang.index('go')#查找的数据第一次在列表中出现的位置
#遍历列表
for item in lang:
     print(item)
#遍历列表,并且输出索引
for index,item in enumerate(lang):
    print(index,'=>',item)
  • 列表推导式
#[表达式 for 变量 in 集合] [表达式 for 变量 in 集合 if 条件]
ret = [i for i in range(10)]
print(ret)
ret = [i*10 for i in range(10)]
print(ret)
ret = [i*10+1 for i in range(10) if i%2 == 0]
print(ret)

#给已知列表用列表推导式
lang = ['python','php','c','c++','go']
res = [i for i in enumerate(lang)]#打印结果 [(0, 'python'), (1, 'php'), (2, 'c'), (3, 'c++'), (4, 'go')]
print(res)
res = [(i,x) for i,x in enumerate(lang)]#打印结果 [(0, 'python'), (1, 'php'), (2, 'c'), (3, 'c++'), (4, 'go')]
print(res)
res = [(i,x) for i,x in enumerate(lang) if x == 'php' ]#打印结果 [(1, 'php')]
print(res)
res = [x for i,x in enumerate(lang) if x == 'php' ]#单独打印x ['php']
print(res)
res = [i for i,x in enumerate(lang) if x == 'php' ]#单独打印i [1]
print(res)

# 复杂列表推导式变成for的步骤
ret = [(x,y) for x in range(10) if x%2 if x>3 for y in range(10) if y>7 if y!= 8]

for x in range(10):#结果是5 7 9 
	if x % 2:
		if x > 3:
			print(x)
for y in range(10): #结果是9
	if y > 7:
		if x != 8:
			print(y)
所以上面列表推导式样的结果是(5,9),(7,9),(9,9)
元组(tuple)

1、定义

  • 用小括号括起来 :lang = (‘python’,‘php’,‘c’,‘c++’,‘go’)
    +本质和列表一样,不同的是元组只能读里面的值,不能修改
  • 当里面只有一个元素的时候,一定要在后面加,lang = (‘c++’,)

2、操作

# 定义元组
lang =('python','php','c','c++','go')
print(lang[2])
# 创建空元组
info_tuple = ()
# 遍历元组
for index,item in enumerate(lang):
    print(index,'=>',item);
#元组 可以使用 cont和index 统计
print(lang.index('php')) #取指定值的索引
print(lang.count(’php‘)) #取元素在元组中出现的次数
  • 列表和元组的转换:
  list(tuple)  #  把元组转成列表
  tuple(list)  #  把列表转成元组
  • 元组是不可变类型
字典dictionary

1、定义:

  • 如果列表在php中相当于索引数组,那么字典就是php的关联数组(更像json)
  • 字典是用键值对表示的,所以无序
  • 用 {}来定义字典,也相当于js里面的 json数据
  • 键 key 是索引 值 value 是数据
  • 键 和 值 之间使用 : 分隔
  • 键必须是唯一的 值 可以取任何数据类型,但 键 只能使用 字符串、数字或 元组
xiaoming = {"name": "小明",
            "age": 18,
            "gender": True,
            "height": 1.75}
#如果键同名会把前面的覆盖掉

2、字典取值

#取得指定索引的值
xiaoming['name']

3、字典修改/增加

xiaoming['age'] = 12   #存在就修改,
xiaoming['fav'] = ’aa‘ # 不存在就增加

boy = {
    'name':'222',
    'sex':'男'
}
xiaoming.update(boy) #字典合并,键值重复会被覆盖
print(xiaoming)

4、字典删除

xiaoming.popitem() #删除字典最后一个元素
xiaoming.pop(’age‘) #删除指定键值的元素

5、字典统计

print(len(xiaoming)) #统计长度

6、遍历:for k,v in …

xiaoming = {"name": "小明",
            "age": 18,
            "gender": True,
            "height": 1.75}
for k,v in xiaoming.items():    

7、 其它操作如下图所示
在这里插入图片描述
8、更常用的方法,列表中每个元素是一个字典:

 [{'name': 'bobo', 'age': 18}, {"name": 'bobo1', 'age': 19}] 
  这种格式比较常用,列表中嵌套字典
字符串(string)

1、定义:

  • 用单引号或双引号引起来的数据类型
  • 如果在字符串里使用引号,可以 用 \ 转义,或单双引号嵌套
str = "hellow \"Python\""
print(str)

2、字符串操作

  • 获得元素 可以通过索引取获取指定位置的字符(字符串也支持索引)a[-1]代表最后一个元素

  • 用for 遍历

string = "Hello Python"
print(string[-1])

for c in string:
    print(c)
  • 统计操作
print(len(str))#字符串的长度

print(str.count('ell'))#小字符串出现的次数
print(str.count('elw'))#不存在返回 0

print(str.index('ell'))#小字符串第一次出现的位置 返回1
print(str.index('elw'))#不存在则报错
  • 字符串判断方法
str.isspace() #是否全部是空格,是 true 否 False
str.isdecimal()#是否只包含数字 是ture 否 false 不能判断unicode编码的的数字
str.isdigit()#是否只包含数字 是ture 否 false 不能判断中文
str.isnumeric()#能判断中文 比如 一千零1
以上都不能判断小数
  • 字符串的查找替换
str = "Hellow Python"
print(str.startswith('hell'))#判断是否以指定字符串开始
print(str.endswith('Yhon'))#判断是否以指定字符串结束
print(str.find('hon')) #查找子串出现的位置 从左开始,如果是rfind 则从右开始
print(str.find('hon')) #查找子串出现的位置 从左开始,如果是rfind 则从右开始
print(str.replace('Python','world'))# 把 ’Python‘ 替换成world 不改变原字符串
  • 字符串的大小写转换及文本对齐
print(str.upper())#转换成大写
print(str.lower())#转换成小写
print(str.swapcase())#大小写转换
print(str.title())# 把单词的每个首字母变成大写
print(str.strip())#去除字符串里面的空格
print(str.center(10,'**'))#字符串居中显示,占10个字符位,不足补*
  • 字符串的拆分和连接
str = '\t\n春晓\t\r\n 孟浩然 \t\r春眠不觉晓\t\n处处闻啼鸟   \t\n夜里风雨时\r\n 花落知多少'
print(str)
new_list = str.split()#不传参数默认以空白字符 切割成列表
print(new_list)
new_str = "-".join(new_list)#用-把列表元素组合成新字符串
print(new_str)
  • 其它常规操作:
    在这里插入图片描述

3、切片

  • 切片适用于 字符串、列表、字典、元组
    在这里插入图片描述
  • 公式: 字符串[开始索引:结束索引:步长]
  • 指定的区间属于 左闭右开 型 [开始索引, 结束索引) 从 起始 位开始,到 结束位的前一位 结束(不包含结束位本身)

以下的字符串都是这样定义的:string = “HelloPython”

截取从 2 ~ 5 位置 的字符串:
str = string[2:6] #省略后面步长的 :1
  • 从头开始,开始索引 数字可以省略,冒号不能省略
截取从 开始 ~ 5 位置 的字符串。省略后面步长的 :1
str = string[:6]
  • 末尾结束,结束索引 数字可以省略,冒号不能省略
# 截取从 2 ~ 末尾 的字符串
str = string[2:]
# 截取完整的字符串
# 头和尾都省略了、步长和冒号也省略了 
# 中间冒号不能省
str = string[:] 
  • 步长默认为 1,如果连续切片,数字和冒号都可以省略
# 从开始位置,每隔一个字符截取字符串
# 开始和结束省了,中间冒号不能省
# 步长不为1,冒号和数字都不能省
# 1为连续,2为每隔1个,依次类推
str = string[::2]
  • 倒序 (切片的原理以及公式不变,原则只有一个,只要出现负数就得从右开始)
# 打印最后末尾的n,
print(string[-1])
# 打印最后末尾的o
print(string[-2])

#=======以上内容 结合切片使用=======
#截取从2~ `末尾 - 1`的字符串===>尾是负数表示  结尾从 最右开始数
print(string[2:-1])#---lloPytho

#截取 末尾2个字符====头是负数时,从右边开始截取,2为个数
print(string[-2:])#----on

# 字符串逆序=====string[-1],string[-2],然后从头到尾 这样执行,所以就倒序了
print(string[::-1])
  • 切片总结:公式 [开始索引:结束索引:步长]

哪个省略,就不符合包括开头不包括结尾的原则了
在这里插入图片描述

1、公式:[开头:结尾:步长] 步长正数,从左到右,反之逆序
2、可以省略的地方:步长是+1时,冒号和1都可以省略
3、如果从头取可以省略头;如果取到末尾,可以省略结束位置
4、结合正向反向

集合

1、集合(set)是一个无序的不重复元素序列。字典是键值对的,集合是单个的。
2、可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。

a = set()

3、创建格式: parame = {value01,value02,…}或者set(value)

4、常规操作(集合和字典和列表有相同处):
在这里插入图片描述
5、集合主要作用点(给列表做去重操作)

li = ['python', 'c', 'c++', 'c++']
print(list(set(li)))

不使用集合给列表去重
li = ['python', 'c', 'c++', 'c++','c']
li1 = []
for item in li:
    print(item)
    if item not in li1:
        print('222')
        li1.append(item)
发布了61 篇原创文章 · 获赞 11 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/dmguying/article/details/103643092