首页 > 技术文章 > python数据类型

wzcc 2021-11-29 11:34 原文

python数据类型

一、数值型

二、字符型

三、容器型数据类型

 

数值型

1、整型

x = 3
print(id(x))
x = 5
print(id(x))

# id(): 返回一个整数,代表变量在内存中的地址
# 以上两个id返回的值明显不一样,说明变量值的地址是不一样的

2、浮点型

浮点数用来处理实数,即带有小数的数字。类似于C语言中的double类型

注:  浮点数的取值范围和精度一般无限制,但是浮点数运算可能存在误差,也就是可能有不确定尾数

x = 2.23
print(x)
d = 4.3
c = d-x
print(c)

3、布尔型

布尔数据类型,简称布尔类型,在 Python 中用 `bool`表示。 bool 类是 int 类的子类。 布尔类型提供了两个布尔值来表示真(对)或假(错),在 Python 中分别用 `True`(真或对)或`False`(假或错)来表示。

print(True)  # True 首字母要大写
print(False)  # False 首字母要大写
print(type(True))  # 查看 True 的类型
print(type(False))  # 查看 False 的类型

结果:

True
False
<class 'bool'>
<class 'bool'>

字符型

1.字符串的表示

(1)用单引号、双引号或三引号括起来的符号系列称为字符串, 并且单引号、双引号、三单引号、三双引号可以互相嵌套,用来表示复杂字符串

1 "wyb", 'Hello, World', "python", '''Tom said, "Let's go"'''都是字符串

(2)空串表示为'', ""

1 # 下面是空串:
2 msg = ''
3 name = ""

(3)三引号表示的字符串可以换行,支持排版较为复杂的字符串;三引号还可以在程序中表示较长的注释

1 msg = '''
2 我是谁
3 我在哪
4 我在干什么
5 '''
6 print(msg)  # 字符串换行
1 '''
2 三引号中可以写多行注释
3 这里可以写多行注释
4 '''

(4)不加引号的字符串会被系统认为是变量

>>> name = jack
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'jack' is not defined
>>> jack = "wyb"
>>> name = jack
>>> name
'wyb'

字符串常用方法

(1)字符串拼接:

+:  直接将两个字符串相加   *: 字符串复制多次

join(seq) 以指定字符串作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串

1 >>> name = "wyb"
2 >>> age = "21"
3 >>> name + age
4 'wyb21'
5 >>> name*3
6 'wybwybwyb'
1 >>>''.join("python")
2 'python'
3 >>>'123'.join("python")
4 'p123y123t123h123o123n'

注: 字符串只能与字符串进行拼接,不能与其他数据类型一起拼接!

1 >>> name = "wyb"
2 >>> age = 21
3 >>> name + age
4 Traceback (most recent call last):
5   File "<stdin>", line 1, in <module>
6 TypeError: must be str, not int

(2)大小写:

capitalize() 将字符串的第一个字符转换为大写

swapcase() 将字符串中大写转换为小写,小写转换成大写

upper() 转换字符串中所有小写字母为大写 

lower() 转换字符串中所有大写字符为小写

title() 返回"标题化"的字符串,就是说所有单词都是以大写开始,其余字母均为小写

>>> s = "python web framework"
>>> s.capitalize()
'Python web framework'
>>> s
'python web framework'
>>> s.upper()
'PYTHON WEB FRAMEWORK'
>>> s.lower()
'python web framework'
>>> s.title()
'Python Web Framework'

>>> s = "ABCDefg"
>>> s.swapcase()
'abcdEFG'

(3)字符串填充:

center(width, fillchar) 返回一个指定的宽度 width 居中的字符串,fillchar 为填充的字符,默认为空格

ljust(width[, fillchar]) 返回一个原字符串左对齐,并使用 fillchar 填充至长度 width 的新字符串,fillchar 默认为空格。

rjust(width,[, fillchar]) 返回一个原字符串右对齐,并使用fillchar(默认空格)填充至长度 width 的新字符串

zfill (width) 返回长度为 width 的字符串,原字符串右对齐,前面填充0

 
>>> s = "python"
>>> s.center(20, '*')
'*******python*******'
>>> s.ljust(10, '*')
'python****'
>>> s.rjust(10, '*')
'****python'
>>> s.zfill(10)
'0000python'

(4)数值计算:

len(string) 返回字符串长度

count(str, beg= 0,end=len(string)) 返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数,str可以是一个字符也可以是多个字符

>>> s = "python"
>>> len(s)
6
>>> s = "111222abcdefga"
>>> s.count(1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: must be str, not int
>>> s.count('1')
3
>>> s.count('1111')
0
>>> s.count('111')
1
>>> s.count('a')
2

容器型数据类型

1、列表

# append()  将参数作为元素添加到列表中去
a = [1, 2]
a.append([3, 4])    
print(a)    # [1, 2, [3, 4]]
# extend()  将参数列表逐个添加到列表中去
a = [1, 2]
a.extend([3, 4])
print(a)    # [1, 2, 3, 4]
# insert(index, object)     在指定位置index前插入元素object
a = [1, 2, 3, 4]
a.insert(1, [3, 4])
print(a)    # [1, [3, 4], 2, 3, 4]
复制代码
# 修改元素有两个方法,一个是通过下标,一个是通过切片(切片是左闭右开区间)
a = [1, 2, 3, 4]
# 方式一:下标修改
a[1] = ""
print(a)    # [1, '中', 3, 4]
# 方式二:切片修改,也可以实现删除
a[2:3] = ["", "", "", ""]   # [1, '中', '天', '下', '大', '同', 4]
print(a)
a[2:3] = []
print(a)    # [1, '中', '下', '大', '同', 4]
复制代码
# a.index(x,begin,.end)       # 在a中的begin和end之间,查找字符x的下标,没有会报错
a = [1, 2, 3]
print(a.index(2))   # 1
复制代码
列表.count(x, begin, end)    # 查询x在列表中的个数
del 列表[下标值]             # 根据下标进行删除
列表.pop()                   # 删除最后一个元素,也可以针对指定的下标删除,会返回删除的内容
列表.remove(元素)            # 将指定的元素从列表中删除
列表.sort(reverse=True)      # sort方法是将列表按特定顺序重新排列,默认为由小到大,参数reverse=True可改为倒序,由大到小。
列表.reverse()                # reverse方法是将list逆置。

2、字典

 字典表示为dict,使用键值对的形式来存储数据的,使用的时候用花括号({})来对这些键值对进行封装,而且内部也是无序存储的。相对于list来说,字典的查询速度快,不会随着key的增加而变慢,但是需要大量的内存。这个通过key计算位置的算法被称为哈希算法。

如下:

注:键可以使用:元组,数字,字符串,如果是布尔值,会忽略,如果是字典或者列表,会直接报错。

如果键重复,只保留最后一个

常用字典方法

# 取字典值可以用键来取,如果写的是字典中没有的键,会报错,一般用get来取值,没有对应的键会返回None,get的第二个参数可以设置返回的值
a = {"name": "张三", "age": 18, "sex": ""}
print(a["name"])    # 张三
print(a.get("name"))    # 张三
print(a.get("nam"))     # None
print(a.get("nam", "找不到"))      # 找不到
print(a["nam"])     # 报错
复制代码
# 添加一个键值对,直接用:字典名["键名"] = 值
a = {"name": "张三", "age": 18, "sex": ""}
a["address"] = "北京"
print(a)
复制代码
# 字典名.keys() 返回字典所有key,并放在一个类似列表的dict_keys类中
# 字典名.values() 返回字典所有value,并放在一个类似列表的dict_values类中
# 字典名.items() 返回所有key和values,所有的键值对分别构成一个元组,并放在一个类似列表的dict_values类中
a = {"name": "张三", "age": 18, "sex": ""}
print(a.keys())
print(type(a.keys()))
print(a.values())
print(type(a.values()))
print(a.items())
print(type(a.items()))

# 注:可以在for循环中用拆包的方式分别获取key和value值
复制代码
复制代码
# 删除一个键值对可以用:del 字典名["键名"]
# 删除字典则是:del 字典名
# pop也可以删除一个键值对:字典名.pop(键名,参数二),如果没有对应的键,返回第二个参数,不写的话会直接报错
# 随机删除一个键值对:字典名.popitem()
# clear是清空字典
a = {"name": "张三", "age": 18, "sex": ""}
del a["name"]
print(a)       # {'age': 18, 'sex': '男'}
print(a.pop("hobby", "没有"))
a.popitem()    # {'sex': '男'}
print(a)
a.clear()
print(a)       # {}
del a
print(a)       # a被删除,not defined
复制代码
其他:

di.setdefault("k111","123")    # 设置值,如果键存在,则返回原有值,如果不存在,则将第一个参数作为键,第二个参数作为值插入到字典中,并返回值
di.update({"k1":"111","k2":"324"})        # 设置值,如果已经存在则覆盖,不存在则填入,参数中也可以用k1=23,k2="daf"这种格式
根据序列创建字典,di.fromkeys({"k1","k2","k3"],123)      # 参数中,第一个列表是所有的key,第二个是指定统一的

3、元组

元组不可以增删改

元组 (Tuple) 是 Python 中基本数据结构之一,与列表类似,但元组中的元素不允许被修改,因此元组也被称作 只读列表 。 元组使用小括号 - () 包裹,元素间使用逗号 - , 分隔,元组中的元素可以是字符串、数字、列表、元组等其他数据类型。

a = (1, 2, 3, [4, 5])
a[3][1] = 9
print(a)        # (1, 2, 3, [4, 9])

4、集合

集合的两大功能:

  • 集合可以实现去重的功能
  • 集合可以实现关系测试:交集;差集;并集;是否子集;是否没有交集

1. 集合的定义

集合里面的元素是没有重复的

 

定义一个空集合:第一种方法的定义是错误的,生成的是一个字典;第二种方法才是正确的定义一个空集合的方法。

 

2. 集合的特性

集合是无序的,不重复的数据类型,因此不支持索引;切片;重复和连接,只满足成员操作符和for循环。

 

3. 集合的增删查

增加:

1. add()—增加单个元素

 

2. update()—增加多个元素

 

删除:

1. pop()—默认删除集合的第一个元素,这里与列表刚好相反,尤其注意,不可相互混淆。

 

2. remove()—删除指定的元素

 

3. clear()—清空集合元素

总结
可变数据类型:列表,字典,集合
不可变数据类型:数值类型,字符串,元组
可变数据类型实现某个功能,直接改变可变的数据类型;
不可变数据类型实现某个功能,需要将结果赋值给另外一个变量;
是否实现for循环
可迭代数据类型:str,list,tuple,dict,set
不可迭代数据类型:数值类型
是否支持索引,切片,重复和连接特性
有序的数据类型:str,list,tuple支持
无序的数据类型:dict,set不支持

推荐阅读