Python数据类型(新)

数据类型

类型查看

  1. type

    • 可以使用type内置函数查看变量所指的对象类型

    • a=1
      b=1.0
      c="1"
      d=1,
      e=[1]
      f={1:1}
      g={1}
      
      print(type(a))
      print(type(b))
      print(type(c))
      print(type(d))
      print(type(e))
      print(type(f))
      print(type(g))
      
    • image-20231222112839902

  2. isinstance

    • 如字面意思,isinstance()来对一个数据类型询问是否是某个类型

    • a = 123654
      print(isinstance(a,int))# -->True
      print(isinstance(a,float))# -->False
      
    • image-20231222113633257

同时多个变量赋值

a,b,c=1,2,"aaa"
print(a,b,c)

image-20240605092400441

您也可以使用del语句删除一些对象引用。

del语句的语法是:

del var1[,var2[,var3[....,varN]]]

您可以通过使用del语句删除单个或多个对象。例如:

del var
del var_a, var_b

标准数据类型

  • Number(数字)
  • String(字符串)
  • bool(波尔类型)
  • List(列表)
  • Tuple(元组)
  • Set(集合)
  • Dictionary(字典)

其中

  • 不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);
  • 可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。

1.数字(Number)

python3支持int,float,bool,complex(复数)

注:没有double long  longint.....

不同于C语言,数字可以表示非常大

print(2**200)# 2^200

image-20231222114045688

>>> 5 + 4  # 加法
9
>>> 4.3 - 2 # 减法
2.3
>>> 3 * 7  # 乘法
21
>>> 2 / 4  # 除法,得到一个浮点数
0.5
>>> 2 // 4 # 除法,得到一个整数
0
>>> 17 % 3 # 取余 
2
>>> 2 ** 5 # 乘方
32
# 复数的运算
>>> (1+5j)+(2-6j)
(3-1j)
>>> (1+5j)*(1-6j)
(31-1j)

2.字符串

Python中的字符串 是用''" "这两种引号引起来的内容

  • 使用三引号('''""")可以指定一个多行字符串。
s = '''你好,啊啊啊
    66677777777777
    88888999999999'''
print(s)

image-20240605084528574

  • 转义符 \
  • 反斜杠可以用来转义,使用 r 可以让反斜杠不发生转义。 如 r"this is a line with \n"\n 会显示,并不是换行。
>>> print(r"123\n")
123\n
  • 按字面意义级联字符串,如 "this " "is " "string" 会被自动转换为 this is string
  • 字符串可以用 + 运算符连接在一起,用 ***** 运算符重复。
  • Python 中的字符串有两种索引方式,从左往右以 0 开始,从右往左以 -1 开始。
  • Python 中的字符串不能改变。
  • Python 没有单独的字符类型,一个字符就是长度为 1 的字符串。
  • 字符串切片 str[start:end],其中 start(包含)是切片开始的索引,end(不包含)是切片结束的索引。
  • 字符串的切片可以加上步长参数 step,语法格式如下:str[start🔚step]
'我是一个字符串'
"我也是一个字符串"

下标索引

str = "abcdef"
# 从前面索引 0  1  2  3  4  5
# 从后面索引 -6 -5 -4 -3 -2 -1
		   "a  b  c  d  e  f"

查找

s.find通过元素找索引,找到返回索引,找不到返回-1
s.index通过元素找索引,找到返回索引,找不到返回error

s = 'alexWUsir'
s8_11 = s.find('W')
s8_12 = s.index('W')
s8_21 = s.find('WU')
s8_22 = s.index('WU')
s8_31 = s.find('A')
s8_32 = s.index('A')
print(s8_11,type(s8_12))     
 #4 <class 'int'>
print(s8_21 ,type(s8_22))    
 #4 <class 'int'>
print(s8_31 ,type(s8_32))     
#报错:ValueError: substring not found----未找到子字符串

截取

str[头下标:尾下标]

>>> str = "123456789"
>>> print(str[0:3])
123
>>> print(str[-5:-3])
56

打印

>>> str = "123"
>>> print(str*2)
123123

3.bool(布尔类型)

布尔类型即True False

在 Python 中,True 和 False 都是关键字,表示布尔值。

布尔类型可以用来控制程序的流程,比如判断某个条件是否成立,或者在某个条件满足时执行某段代码。

布尔类型特点:

  • 布尔类型只有两个值:True 和 False。
  • 布尔类型可以和其他数据类型进行比较,比如数字、字符串等。在比较时,Python 会将 True 视为 1,False 视为 0。(类似于C语言)
>>> print(int(a))
1
>>> print(int(b))
0
>>>
  • 布尔类型可以和逻辑运算符一起使用,包括 and、or 和 not。这些运算符可以用来组合多个布尔表达式,生成一个新的布尔值。
  • 布尔类型也可以被转换成其他数据类型,比如整数、浮点数和字符串。在转换时,True 会被转换成 1,False 会被转换成 0
a = True
b = False

# 比较运算符
print(2 < 3)   # True
print(2 == 3)  # False

# 逻辑运算符
print(a and b)  # False
print(a or b)   # True
print(not a)    # False

# 类型转换
print(int(a))   # 1
print(float(b)) # 0.0
print(str(a))   # "True"

4.元组

Python中的元组是一种不可变的顺序表

  • 在Python中,元组是不可变的有序元素的序列

  • 即创建后不可以被修改

>>> tup = (1, 2, 3, 4, 5, 6)
>>> print(tup[0])
1
>>> print(tup[1:5])
(2, 3, 4, 5)
>>> tup[0] = 11  # 修改元组元素的操作是非法的
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>>

虽然tuple的元素不可改变,但它可以包含可变的对象,比如list列表。

构造包含 0 个或 1 个元素的元组比较特殊,所以有一些额外的语法规则:

tup1 = ()    # 空元组
tup2 = (20,) # 一个元素,需要在元素后添加逗号

如果你想创建只有一个元素的元组,需要注意在元素后面添加一个逗号,以区分它是一个元组而不是一个普通的值,这是因为在没有逗号的情况下,Python会将括号解释为数学运算中的括号,而不是元组的表示。

如果不添加逗号,如下所示,它将被解释为一个普通的值而不是元组:

not_a_tuple = (42)
  • 创建方式val_name = ([val],[val].....)

  • #----------声明------------
    tuple_1 = (1,2,3)
    print(tuple_1)
    

    image-20240102165546945

元组的运算

  • 虽然说元组的额元素是不可以更改的,但元组之间可以使用+,+=,*号进行运算,运算后会生成一个新的元组

+ 运算

  • tuple_1 = (1,2,3)
    tuple_2 = (1,2,3)
    tuple_1 = tuple_1+tuple_2 #-----相当于列表的 +
    print(tuple_1)
    

    image-20240102165836255

+=运算

与 + 运算一样

* 运算

  • 把元组复制为n份复制给新的元组

  • newTuple = oldTuple * n把oldTuple复制三份给newTuple

  • tuple_1 = (1,2,3)
    tuple_1 = tuple_1 * 3
    print(tuple_1)
    

    image-20240102170328382

元组的删除

  • 元组虽然说是不可以修改,但是可以全部删除使用del关键字,直接把这部分内存删除掉

  • del list_name / del tuple_name

  • tuple_1 = (1,2,3)
    del tuple_1
    print(tuple_1)
    

    image-20240102170733649

注意:

  • 1、与字符串一样,元组的元素不能修改。
  • 2、元组也可以被索引和切片,方法一样。
  • 3、注意构造包含 0 或 1 个元素的元组的特殊语法规则。
  • 4、元组也可以使用 + 操作符进行拼接。

5.列表(List)

Python中的列表是一种可变的顺序表

  • 在日常中我们通过给变量赋值来存储数据,比如

  • a = "hello"
    b = "world"
    c = "你好啊"
    d = "....."
    
  • 由于变量一次只能存储一个数据,但我们如果想一次存储多个数据,的话这样存储会很复杂,所以,我们可以通过列表

  • 列表(List)是Python中的一组数据类型,它由一组有序的元素组成,可以存储任何类型数据,类似数据结构中的顺序表

  • 列表是用'[]' 声明的,通过赋值可以声明

  • # ------------声明列表------------
    list_name = ["cwy","zh","666"]
    list_init = []
    list_num = [0]*n #n个0元素的列表
    print(list_name)
    print(list_init)
    
  • image-20231226233350537

查找列表

  • 索引(index)是数据结构中用来定位和寻找数据的检索方式
列表索引
头下标: 0  1  2  3  4  5
尾下标:-6 -5 -4 -3 -2 -1
	  [1, 2, 3, 4, 5, 6]
  • 由于列表是有序的,因此可以通过 索引 直接访问到列表的某一个位置

  • 索引是从 0开始的到 n-1

  • Python中就可以通过[index]来访问,与C语言一模一样

  • # ------------声明列表------------
    list_name = ["cwy","zh","666"]
    print(list_name[0])
    
  • image-20231226234437479

修改列表

  • 列表是可以被修改的,可以通过索引列表的元素赋值,修改对应位置的值

  • list_val[index] = val

  • #-------------修改列表------------
    list_name = ["cwy","zh","666"]
    list_name[0] = 1
    print(list_name[0])
    

    image-20231230090359495

列表的切片

  • 如果你想一次获得列表多个元素时,我们可以使用列表的切片

  • list_val[index1 : index2](左闭右开的区间)

  • #------------列表的切片------------
    list_num = [1,2,3,4,5,6,7,8,9]
    print(list_num[1:3])# 左闭右开的区间  0的话可以省略
    
    list = [ 'abcd', 786 , 2.23, 'runoob', 70.2 ]  # 定义一个列表
    tinylist = [123, 'runoob']
    
    print (list)            # 打印整个列表
    print (list[0])         # 打印列表的第一个元素
    print (list[1:3])       # 打印列表第二到第四个元素(不包含第四个元素)
    print (list[2:])        # 打印列表从第三个元素开始到末尾
    print (tinylist * 2)    # 打印tinylist列表两次
    print (list + tinylist)  # 打印两个列表拼接在一起的结果
    
    

image-20231230090656063

['abcd', 786, 2.23, 'runoob', 70.2] abcd
[786, 2.23]
[2.23, 'runoob', 70.2]
[123, 'runoob', 123, 'runoob']
['abcd', 786, 2.23, 'runoob', 70.2, 123, 'runoob']

  • Python 列表截取可以接收第三个参数,参数作用是截取的步长,以下实例在索引 1 到索引 4 的位置并设置为步长为 2(间隔一个位置)来截取字符串
>>> letters = ['a','b','c','d','e','f','g']
>>> letters[0:5:2] #间隔一位
['a', 'c', 'e']

如果第三个参数为负数表示逆向读取

举个例子,反转字符串

# 字符串的切片
def reverseWords(input):  
    # 通过空格将字符串分隔符,把各个单词分隔为列表
    inputWords = input.split(" ") 
    # 翻转字符串
    # 假设列表 list = [1,2,3,4],  
    # list[0]=1, list[1]=2 ,而 -1 表示最后一个元素 list[-1]=4 ( 与 list[3]=4 一样) 
    # inputWords[-1::-1] 有三个参数
    # 第一个参数 -1 表示最后一个元素
    # 第二个参数为空,表示移动到列表末尾
    # 第三个参数为步长,-1 表示逆向
    inputWords=inputWords[-1::-1] 
    # 重新组合字符串
    output = ' '.join(inputWords) 
    return output 

input = 'I like runoob'
rw = reverseWords(input) 
print(rw)
PS D:\pythonProject> & C:/python/python.exe d:/pythonProject/列表2.py
runoob like I

列表是可以修改的

>>> a = [1,2,3,4,5,6,7]
>>> a[0]
1
>>> a[2:5]
[3, 4, 5]
>>> a[2:5] = 5 # 注意类型对应
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can only assign an iterable
>>> a[2:5] = [0]
>>> a
[1, 2, 0, 6, 7]

列表的追加

  • 追加是在原始列表的末尾追加一个元素

  • list_val . append(val)

  • list_num = [1,2,3,4,5,6,7,8,9]
    #------------列表的追加------------
    list_num.append(123)
    print(list_num)
    
  • image-20231230091240556

列表的插入

  • 插入 用于将指定对象插入指定位置,这个位置的原来的元素会向后移一位

  • list_val . insert(index , val)

  • list_num = [1,2,3,4,5,6,7,8,9]
    list_num.insert(1,"插我") # 下标
    print(list_num)
    
  • image-20231230091741060

列表的连接

  • 可以使用+ 将两个列表链接起来

  • #------------列表的连接-------------
    list_num = [1,2,3,4,5,6,7,8,9]
    list_name = ["cwy","zh","666"]
    list_all = list_name+list_num
    print(list_all)
    
  • image-20231230094025014

列表的删除

  • 列表可以使用remove删除

  • list_val.remove(index)index指的是元素的位置而不是下标,所有是从1开始的

  • list_num = [1,2,3,4,5,6,7,8,9]
    list_num.remove(1)
    print(list_num)
    
  • image-20231230094855393

  • list_val.pop(val),删除指定元素

列表的清空

  • 列表可以一次全部清空

  • list_val.clear()

  • #-----------列表的清空-------------
    list_num = [1,2,3,4,5,6,7,8,9]
    list_num.clear()
    print(list_num)
    
  • image-20231230095032006

列表的复制

  • 列表中,我们也可以把一个列表复制一份赋值给新的列表

  • newlist_val = list_val.copy()

  • #-----------列表的复制------------
    list_num = [1,2,3,4,5,6,7,8,9]
    list_num2 = []
    list_num2 = list_num.copy()
    print(list_num2)
    
  • image-20231230095424778

# -----------列表的排序------------
list_num = [1,2,3,4,5,6,7,8,9]
list_num.sort()
print(list_num)
#-----------列表的反转------------
list_num = [1,2,3,4,5,6,7,8,9]
list_num.reverse()
print(list_num)        

#-----------列表的计数------------
list_num = [1,2,3,4,5,6,7,8,9]
count = list_num.count(5)
print(count)

6.字典

字典是一种键值对

  • 在Python中,字典是一种无序可变数据类型,它存储键值对,字典中的是唯一的,可以是任何数据类型

  • 字典是一种关联数据结构

  • 声明dic_name = { key1:val1,key2:val2,......}

  • #---------------字典-------------------
    dic_1 = {1:"张三",2:"李四",3:"王麻子",4:"崔渭阳"}
    

    image-20240102232100948

#!/usr/bin/python3

dict = {}
dict['one'] = "1 - 菜鸟教程"
dict[2]     = "2 - 菜鸟工具"

tinydict = {'name': 'runoob','code':1, 'site': 'www.runoob.com'}


print (dict['one'])       # 输出键为 'one' 的值
print (dict[2])           # 输出键为 2 的值
print (tinydict)          # 输出完整的字典
print (tinydict.keys())   # 输出所有键
print (tinydict.values()) # 输出所有值
>>>1 - 菜鸟教程
>>>2 - 菜鸟工具
>>>{'name': 'runoob', 'code': 1, 'site': 'www.runoob.com'}
>>>dict_keys(['name', 'code', 'site'])
>>>dict_values(['runoob', 1, 'www.runoob.com'])

**{x: x**2 for x in (2, 4, 6)}** 该代码使用的是字典推导式

查找字典元素

查值操作

  • dic_name . get(key) 获取key对应的值

  • dic_name . get(key,num) 获取key对应的值,找不到就返回num

  • val_newname = dic_name [key]

  • dic_1 = {1:"张三",2:"李四",3:"王麻子",4:"崔渭阳"}
    info = dic_1[1]
    print(info)
    

    image-20240103114615765

添加字典元素

  • dic_name [new key] = val_name

  • 注:key不可以重复

  • dic_1 = {1:"张三",2:"李四",3:"王麻子",4:"崔渭阳"}
    dic_1[5] = "张晗"
    print(dic_1)
    

    image-20240103115427888

删除字典元素

  • 删除对应key元素del dic_name [key]

  • 删除整个字典 del dic_name

  • dic_1 = {1:"张三",2:"李四",3:"王麻子",4:"崔渭阳"}
    del dic_1[1]
    print(dic_1)
    

    image-20240103120047854

  • del dic_1
    print(dic_1)
    

    image-20240103120107617

7.集合

集合是一种值的集合

Python 中的集合(Set)是一种无序、可变的数据类型,用于存储唯一的元素。

集合中的元素不会重复,并且可以进行交集、并集、差集等常见的集合操作。

在 Python 中,集合使用大括号 {} 表示,元素之间用逗号 , 分隔。

另外,也可以使用 set() 函数创建集合。

注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。

创建格式:

pareme = {val0,val1,val2,val3}
or
set(val)
  • 可以使用集合进行去重的效果

  • lists = [1,1,2,2,2,3]
    newSet = set(lists)
    print(newSet)
    >>> {1, 2, 3}
    

推导式

{s for s in "FishC"}

结果 {'h','i','F','C','s'};

方法

  • s.add([对象])往集合中添加元素

  • s.pop([对象])弹出对象

  • s.issubset([可迭代对象]) 来表示s是否是[可迭代对象]的子集

  • s.issuperset([可迭代对象])表示s是否是[可迭代对象]的超集

  • s.union([可迭代对象])表示s与可迭代对象的并集

  • s.intersection([可迭代对象](可以多个参数,上面也可以多个参数))表示s与里面可迭代对象的交集

  • s.symmetric_difference([可迭代对象](单个参数))表示s与[可迭代对象]的差集

  • 当然也可以直接使用计算符号

    • |:并集
      &:交集
      -:差集
      
#!/usr/bin/python3

sites = {'Google', 'Taobao', 'Runoob', 'Facebook', 'Zhihu', 'Baidu'}

print(sites)   # 输出集合,重复的元素被自动去掉

# 成员测试
if 'Runoob' in sites :
    print('Runoob 在集合中')
else :
    print('Runoob 不在集合中')


# set可以进行集合运算
a = set('abracadabra')
b = set('alacazam')

print(a)
print(a - b)     # a 和 b 的差集
print(a | b)     # a 和 b 的并集
print(a & b)     # a 和 b 的交集
print(a ^ b)     # a 和 b 中不同时存在的元素

>>>{'c', 'b', 'r', 'a', 'd'}
>>>{'r', 'd', 'b'}
>>>{'m', 'l', 'c', 'b', 'r', 'a', 'z', 'd'}
>>>{'a', 'c'}
>>>{'m', 'r', 'l', 'z', 'd', 'b'}

Setfronzenset

val = fronzenset([对象]);

前者可以进行改变,后者不可以进行改变

8.bytes 类型

在 Python3 中,bytes 类型表示的是不可变的二进制序列(byte sequence)。

与字符串类型不同的是,bytes 类型中的元素是整数值(0 到 255 之间的整数),而不是 Unicode 字符。

bytes 类型通常用于处理二进制数据,比如图像文件、音频文件、视频文件等等。在网络编程中,也经常使用 bytes 类型来传输二进制数据。

创建 bytes 对象的方式有多种,最常见的方式是使用 b 前缀:

x = bytes("hello", encoding="utf-8")
print(x)

x2 = b"12345"
print(x2)
>>>b'hello'
>>>b'12345'

此外,也可以使用 bytes() 函数将其他类型的对象转换为 bytes 类型。bytes() 函数的第一个参数是要转换的对象,第二个参数是编码方式,如果省略第二个参数,则默认使用 UTF-8 编码:

x = bytes("hello", encoding="utf-8")

需要注意的是,bytes 类型中的元素是整数值,因此在进行比较操作时需要使用相应的整数值。例如:

x = b"hello"
if x[0] == ord("h"):
	print("The first element is 'h'")

其中 ord() 函数用于将字符转换为相应的整数值。

posted @   Yang0710  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
  1. 1 イエスタデイ(翻自 Official髭男dism) 茶泡饭,春茶,kobasolo
  2. 2 世间美好与你环环相扣 柏松
イエスタデイ(翻自 Official髭男dism) - 茶泡饭,春茶,kobasolo
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

作词 : 藤原聡

作曲 : 藤原聡

何度失ったって

取り返して見せるよ

雨上がり 虹がかかった空みたいな

君の笑みを

例えばその代償に

誰かの表情を

曇らせてしまったっていい

悪者は僕だけでいい

本当はいつでも

誰もと思いやりあっていたい

でもそんな悠長な理想論は

ここで捨てなくちゃな

遥か先で 君へ 狙いを定めた恐怖を

遥か先で 君へ 狙いを定めた恐怖を

どれだけ僕は

はらい切れるんだろう?

半信半疑で 世間体

半信半疑で 世間体

気にしてばっかのイエスタデイ

ポケットの中で怯えたこの手は

まだ忘れられないまま

「何度傷ついたって

「何度傷ついたって

仕方ないよ」と言って

うつむいて君が溢した

儚くなまぬるい涙

ただの一粒だって

僕を不甲斐なさで 溺れさせて

理性を奪うには十分過ぎた

街のクラクションもサイレンも

街のクラクションもサイレンも

届きやしないほど

遥か先へ進め 身勝手すぎる恋だと

遥か先へ進め 身勝手すぎる恋だと

世界が後ろから指差しても

振り向かず進め必死で

振り向かず進め必死で

君の元へ急ぐよ

道の途中で聞こえたSOS さえ

気づかないふりで

バイバイイエスタデイ ごめんね

バイバイイエスタデイ ごめんね

名残惜しいけど行くよ

いつかの憧れと違う僕でも

ただ1人だけ 君だけ

守るための強さを

何よりも望んでいた この手に今

遥か先へ進め

遥か先へ進め

幼すぎる恋だと

世界が後ろから指差しても

迷わずに進め 進め

2人だけの宇宙へと

ポケットの中で震えたこの手で今

君を連れ出して

未来の僕は知らない

だから視線は止まらない

謎めいた表現技法

意味深な君の気性

アイラブユーさえ

アイラブユーさえ

風に 飛ばされそうな時でも

不器用ながら繋いだ この手はもう

決して離さずに

虹の先へ

点击右上角即可分享
微信分享提示