python02---基础数据类型

python02---基础数据类型

一. 什么是数据类型

我们人类可以很容易的分清数字与字符的区别,但是计算机并不能呀,计算机虽然很强大,但从某种角度上看又很傻,除非你明确的告诉它,1是数字,“汉”是文字,否则它是分不清1和‘汉’的区别的,因此,在每个编程语言里都会有一个叫数据类型的东东,其实就是对常用的各种数据类型进行了明确的划分,你想让计算机进行数值运算,你就传数字给它,你想让他处理文字,就传字符串类型给他。

Python中常用的数据类型有多种,如下:

整数(int) ,字符串(str),布尔值(bool),列表(list),元组(tuple),字典(dict),集合(set).

1.1 可变数据类型和不可变数据类型

1.1.1 可变数据类型

列表 list,字典 dict,集合 set;
不可hash

1.1.2 不可变数据类型

不可更改的数据类型(可hash),元祖,bool,数字,str

二. 基础数据类型---数字

2.1 整型(int)

跟C语言不同,Python的长整数没有指定位宽,即:Python没有限制长整数数值的大小,但实际上由于机器内存有限,我们使用的长整数数值不可能无限大。
注意,自从Python2.2起,如果整数发生溢出,Python会自动将整数数据转换为长整数,所以如今在长整数数据后面不加字母L也不会导致严重后果了。
注意:在Python3里不再有long类型了,全都是int


除了int和long之外, 其实还有float浮点型, 复数型,但今天先不讲啦

2.1.1 bit_length()

数字主要是用于计算用的,使用方法并不是很多,就记住一种就可以:

#bit_length() 当十进制用二进制表示时,最少使用的位数
v = 11
data = v.bit_length()
print(data)

2.2 浮点型(float)

三. 布尔值 bool

布尔类型很简单,就两个值 ,一个True(真),一个False(假), 主要用记逻辑判断

但其实你们并不明白对么? let me explain, 我现在有2个值 , a=3, b=5 , 我说a>b你说成立么? 我们当然知道不成立,但问题是计算机怎么去描述这成不成立呢?或者说a< b是成立,计算机怎么描述这是成立呢?
没错,答案就是,用布尔类型

布尔值就两种:True,False。就是反应条件的正确与否。

真   1   True。
假   0   False。

字符串
'' 空为 False,非空位True

四. 字符串 str

在Python中,加了引号的字符都被认为是字符串!

name = "Alex Li" #双引号
age = "22"       #只要加引号就是字符串
age2 = 22          #int

msg = '''My name is taibai, I am 22 years old!'''  #我擦,3个引号也可以

hometown = 'ShanDong'   #单引号也可以

那单引号、双引号、多引号有什么区别呢?

让我大声告诉你,单双引号木有任何区别,只有下面这种情况 你需要考虑单双的配合

msg = "My name is Alex , I'm 22 years old!"

多引号什么作用呢?作用就是多行字符串必须用多引号

msg = '''
今天我想写首小诗,
歌颂我的同桌,
你看他那乌黑的短发,
好像一只炸毛鸡。
'''
print(msg)

字符串拼接

数字可以进行加减乘除等运算,字符串呢?让我大声告诉你,也能?what ?是的,但只能进行"相加"和"相乘"运算。

>>> name
'Alex Li'
>>> age
'22'
>>> 
>>> name + age  #相加其实就是简单拼接
'Alex Li22'
>>> 
>>> name * 10 #相乘其实就是复制自己多少次,再拼接在一起
'Alex LiAlex LiAlex LiAlex LiAlex LiAlex LiAlex LiAlex LiAlex LiAlex Li'

注意,字符串的拼接只能是双方都是字符串,不能跟数字或其它类型拼接

>>> type(name),type(age2)
(<type 'str'>, <type 'int'>)
>>> 
>>> name
'Alex Li'
>>> age2
>>> name + age2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'int' objects #错误提示数字 和 字符 不能拼接

4.1 索引

索引即下标,就是字符串组成的元素从第一个开始,初始索引为0以此类推。

# 索引从0开始
s='ABCDEFGHIJK'

# 索引,每一次检索都是创建了一个新的字符串,原字符串不发生变化
print(s[0])  # 顺序取
print(s[-1]) # 逆序取

4.2 切片

切片就是通过索引(索引:索引:步长)截取字符串的一段,形成新的字符串(原则就是顾头不顾腚)。

# 切片 ABCD , 顾头不顾尾,尾+1
print(s[0:3])
print(s[0:4])  # s[首:尾]
print(s,s[:],s[0:]) # 全量的三种方法

# 取 A,C,F
print(s[0:5:2])  # s[首:尾:步长]

# 逆序取
print(s[-1::-1])  # s[首:尾:步长]
print(s[::-1])

取全量

# 正向取
print(s,s[:],s[0:]) # 全量的三种方法

# 逆序取
print(s[-1::-1])  # s[首:尾:步长]
print(s[::-1])

4.3 大小写转换

4.3.1 upper() 转大写

s = 'superVi teacher2 help*you'
# 大小写转换,对数字没有影响
# 使用场景:验证码
print(s.upper())     # 转 大写

4.3.2 lower() 转小写

s = 'superVi teacher2 help*you'
print(s.lower())     # 转 小写

4.3.3 capitalize() 仅首字母大写

s = 'superVi teacher2 help*you'
s2 = 'sup	erVi teacher	2 he	lp*you'

print(s.capitalize())  # 仅首字母大写  Supervi

4.3.4 swapcase() 大小写反转

s = 'superVi teacher2 help*you'
print(s.swapcase())  # 大小写反转  SUPERvI

4.4 排版

4.4.1 center() 居中

在特定宽度中,居中输出字符串,空余部分指定字符填充

s = 'superVi teacher2 help*you'

# 内容居中,长度,空白处填充
print(s.center(50,'@'))  # center(长度,'填充物') 默认为空格
print(s.center(5,'@'))  # 如长度不够,输出原字符,排版失败

4.4.2 expandtabs() 特定宽度

# 制表符宽度,补齐
s2 = 'sup	erVi teacher	2 he	lp*you'
print(s2.expandtabs())     # 默认将转换,	 = 8 位(
print(s2.expandtabs(3))    # 如果字符等于8位,则不作转换,不满足8位的补足

4.4.3 format() 格式化输出

#format的三种玩法 格式化输出
res='{} {} {}'.format('egon',18,'male')
res='{1} {0} {1}'.format('egon',18,'male')
res='{name} {age} {sex}'.format(sex='male',name='egon',age=18)

4.4.4 title() 单词以大写字母开头

s = 'superVi teacher2 help*you'
print(s.title())     # 仅单词首字母大写,间隔符需特殊字符(包含数字)

4.5 条件检索

4.5.1 startswith() / endswith() 以...开头/结尾

以...开头,结尾

print(s.startswith('s'))   # 判断是否已...开头,返回bool值
print(s.startswith('u',2,4))   # 判断切片位置,是否以...开头
print(s.endswith(''))

4.5.2 find() / index 检索元素位置

检索元素位置

# 是否包含指定字符串,返回索引
print(s.find('u'))  # 通过元素,找索引下标(第一个),找不到返回-1
print(s.find('M'))  # 找不到返回-1

# 检索元素位置,找不到报错
print(s.index('u'))  # 通过元素,找索引下标(第一关)
# print(s.index('M'))  # 找不到,报错

4.5.3 由...组成

元素是否由什么组成

#####is系列
name='taibai123'
print(name.isalnum()) #字符串由字母或数字组成
print(name.isalpha()) #字符串只由字母组成
print(name.isdigit()) #字符串只由数字组成

4.6 分割 / 拆分 / 替换

4.6.1 split() 文本分割 (字符串转换列表)

字符串分割,以什么分割,最终形成一个列表此列表不含有这个分割的元素,


默认分割字符为空格或多个空格,其它字符不可以

# 拆分,分割文本 ,split  ; str --> listPython
s = 'superVi teacher2 help*you'
s1 = ' superVi teacher2 help*you'

print(s.split(' '))  # ['superVi', 'teacher2', 'help*you']
print(s.split('*'))  # ['superVi teacher2 help', 'you']
print(s1.split(' '))  # ['', 'superVi', 'teacher2', 'help*you']

返回值需要有一个列表来接收

4.6.2 replace() 替换

把...替换为...替换次数

#replace
name='alex say :i have one tesla,my name is alex'
print(name.replace('alex','SB',1))

4.7 其它

4.7.1 count() 统计指定元素出现的次数

#数字符串中的元素出现的个数。
ret3 = a1.count("a",0,4) # 可切片
print(ret3)

4.7.2 strip() 按序消除字符串

#strip
name='*barry**'
print(name.strip('*')) 
print(name.lstrip('*'))
print(name.rstrip('*'))

4.8 随手写了个bug

str1 = input('我要判断,你输入数次的个数,多个数字相连判做一个数字! >>>') # w3t4h5u7i8g445fdgt3

for i in str1:
    if i.isalpha():
        str1=str1.replace(i,' ')

print(str1.split())

五. 列表 list

列表是python中的基础数据类型之一,其他语言中也有类似于列表的数据类型,比如js中叫数组,他是以[]括起来,每个元素以逗号隔开,而且他里面可以存放各种数据类型比如:

li = ['alex',123,True,(1,2,3,'wusir'),[1,2,3,'小明',],{'name':'alex'}]

列表相比于字符串,不仅可以储存不同的数据类型,而且可以储存大量数据,32位python的限制是 536870912 个元素,64位python的限制是 1152921504606846975 个元素。而且列表是有序的,有索引值,可切片,方便取值。

5.1 列表的索引和切片

# 取单个元素的时候,这个元素是什么类型,取出来就是什么类型
# 切片操作时,取到的为列表类型

li = ['alex',123,True,(1,2,3,'wusir'),[1,2,3,'小明',],{'name':'alex'}]

print('列表:',li,'
')
print('第一个元素',li[0])
print('前3个元素',li[0:4])

5.2 列表操作---增

5.2.1 append() 尾部追加

没有返回值,None

li = ['1',2,[3,4]]
print(li)   # ['1', 2, [3, 4]]

li.append('end')
print(li)   # ['1', 2, [3, 4], 'end']

示例:追加花名册,

while 1:
    username = input("输入名字,ok 退出:>>> ")
    if username.lower().replace(' ','')!='ok':
        li.append(username)
        continue
    break
print(li)


while 1:
    username = input("输入名字,ok 退出:>>> ")
    if username.lower().replace(' ','')=='ok':break
    li.append(username)
print(li)

5.2.2 insert 指定位置插入

li = [1,2,3,4]

li.insert(1,'long')
print(li)

5.2.3 extend 可迭代对象

将可迭代对象的元素,依次追加至最后

  • 字符串:转化为单字符进行追加
  • 列表:将各元素依次追加
# 原字符串
bjx = ["zhao"]
bjx.extend('qian')
print(bjx)

# 追加列表
bjx.extend(['qian','sun'])
print(bjx)

5.3 列表操作---删

  • 按元素   ---  remove()
  • 按索引   ---  pop()
  • 清空   ---   clear() / del

5.3.1 pop() 根据索引删除

返回索引对应的元素,并在原列表中删除,找到返回元素,找不到报错

li = [1, 2, 3, 4]
li.pop(1)
print(li)  # [1, 3, 4]

# 为空时,删除最后一位

5.3.2 remove 按照元素删除

按照元素去删,只删除一个,顺序从左向右,找到返回None,找不到返回错误

# remove
li = [1, 2, 3,4,3]
li.remove(3)
print(li)   # [1, 2, 4]

# li.remove()  # 报错

5.3.3 clear() 清空列表

清除元素,保留列表指针

li = [1, 2, 3,4,3]
li.clear()
print(li)  # []

5.3.4 del 删除列表

删除列表,释放内存空间(删除指针)

li = [1, 2, 3,4,3]
del li
print(li)  # NameError: name 'li' is not defined

切片去删

li = [1, 2, 3,4,3]

del li[2:] # [1, 2]
print(li)

5.4 列表操作---改

5.4.1 根据索引去改

li = [1, 2, 3, 4, 5]
li[0]='yi'
print(li)

5.4.2 根据切片去改

用切片的方式修改列表,如果值是可迭代对象,则在切片位置依次插入可迭代对象的每一个元素

li = [1, 2, 3, 4, 5]
li[0:2]='一二'   # 等值替换
print(li)   # ['一', '二', 3, 4, 5]

li[0:2]='一'  # 切片个数被一个元素所替代
print(li)    # ['一', 3, 4, 5]

li[0:2]='一二san' # 所替换元素的个数大于切片的个数
print(li)    # ['一', '二', 's', 'a', 'n', 3, 4, 5]

切片修改不可迭代对象

li = [1, 2, 3, 4, 5]
li[0:2]=2,2
print(li)    # ['一', '二', 's', 'a', 'n', 3, 4, 5]

li = [1, 2, 3, 4, 5]
li[0:2]=2    # 当不是可迭代对象时,被替换的数量要不少于切片元素数量
print(li)    # ['一', '二', 's', 'a', 'n', 3, 4, 5]

情景展示

Traceback (most recent call last):
['yi', 2, 3, 4, 5]
  File "D:/workSpace/python/day04/1.list.py", line 94, in <module>
    li[0:2]=2
TypeError: can only assign an iterable

5.5 列表的操作---查

5.5.1 查看整个列表

用 for 循环

li = [1, 2, 3, 4, 5]

for i in li:
    print(i)

5.5.2 根据切片查看

li = [1, 2, 3, 4, 5]
print(li[0:3])

5.6 公共方法

5.6.1 len 长度

li = [1, 2, 3, 4, 5,3,3,3]
print(len(li))

5.6.2 count  次数统计

li = [1, 2, 3, 4, 5,3,3,3]
print(li.count(3))

5.6.3 index 查找索引

找不到报错

li = [1, 2, 3, 4, 5,3,3,3]
print(li.index(3))

print(li.index(33))    # ValueError: 33 is not in list

5.7 排序

5.7.1 sort(reverse=True) 正向排序

li = [1, 2, 3, 4, 5,3,3,3]
li.sort()
print(li)

5.7.2 sort 逆向排序

li = [1, 2, 3, 4, 5,3,3,3]

li.sort(reverse=True)
print(li)

5.7.3 reverse 顺序反转

li = [1, 2, 3, 4, 5, 3, 3, 3]

li.reverse()
print(li)

5.8. 列表的嵌套

列表里面嵌套列表,就是列表的嵌套了

5.8.1 修改元素

列表是由一个个多元化的元素组成的,在修改的时候,我们可以通过取这个列表的元素,根据元素的类型,来进行相应的操作

li = ['xiaobai','苍劲空','乔延难',['name','age','sex']]
print(li[1][1])

li[1]=li[1].replace('劲','井')
print(li)

5.9 其它

5.9.1 join(iterable) 可迭代对象转换成字符串

根据提供的字符串,来连接可迭代对象,返回字符串

s=xiaobai
'_'.join(s) # x_i_a_o_b_a_i

示例:列表和字符串互转

li = ["zhao",'qian','sun','li']
li2 = ["zhao",'qian','sun','li',['aa','bb']] # 这个是不可以用 join 进行拼接的
print(li)

s = '_'.join(li)
print(s)

l2 =s.split('_')
print(l2)

5.9.2 range(start,end,步长)

可以看作一个列表

# start <= i < end
for i in range(1,20):
    print(i)

for i in range(20): # 从 0 开始写,可以不写0
    print(i)

for i in range(0,20,2): # 步长,开头不能省略
    print(i)

for i in range(10,0,-2): # 逆序取步长
    print(i)

for i in range(0,20,-1): # 错误示例,什么也不输出
    print(i)

5.9.3 多级列表元素的遍历

li = ["zhao",'qian','sun','li',['aa','bb'],1,2,[2,3]]

for i in li:
    if type(i)==list:
        for j in i:
            print(j)
        continue
    print(i)

七. 元组 tuple

元组被称为只读列表,即数据可以被查询,但不能被修改,所以,字符串的切片操作同样适用于元组。例:(1,2,3)("a","b","c")

  • 可循环,可查询,可切片;
  • 元祖的元素类型是不能发生变化的,元祖元素的子元素是可以修改的
  • 元组里面不加逗号,切只有一个元素,该是什么类型,就是什么类型

7.1 修改元素的子元素

tu = (1,2,3,'xiaobai',[2,3,4,'yisheng','happy'])

# 遍历元祖元素
for i in tu:
    print(i)

# 取构成元祖元素的子元素
print(tu[4][3])

# 修改元祖元素的子元素
tu[4][3]=tu[4][3].upper()
print(tu[4][3])

7.2 元组的一级元素是不可改变的

八. 字典 dict

字典是python中唯一的映射类型,采用键值对(key-value)的形式存储数据。python对key进行哈希函数运算,根据计算的结果决定value的存储地址,所以字典是无序存储的key必须是可哈希的。可哈希表示key必须是不可变类型,如:数字、字符串、元组、bool值。
字典(dictionary)是除列表以外python之中最灵活的内置数据结构类型。列表是有序的对象结合,字典是无序的对象集合**。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。

字典的优点:寻找速度快,二分查找法去查询,
如何初始化一个字典?

特点:

  • 储存大量的关系型数据
  • 无序的(3.5 / 3.6)之前,
  • 查询速度非常快

8.1 如何定义字典?

字典的构成需要有三个元素,字典名字,键值对(key,value),键值对可为空

dicName={
    'key':['字符串','可以当 key'],
    2:'数字类型,可以当 key',
    (1,2,3):['元祖','可以当 key'],
    True:'bool 值,也可一当key'
}
dicTest2={}
print(dicName,dicTest2)

结果

# {'key': ['字符串', '可以当 key'], 2: '数字类型,可以当 key', (1, 2, 3): ['元祖', '可以当 key'], True: 'bool 值,也可一当key'} {}

8.2 字典的增加

8.2.1 dic[haha]='xiao;

有的覆盖,没有的添加
根据key值,直接修改,没有的增加,有的修改 value

dicAdd= {'age': 18, 'name': 'xiaobaiyisheng'}

dicAdd['sex']='M'     # 没有增加
dicAdd['name']='Li'   # 有的更改

print(dicAdd)

8.2.2 setdefault(key,value)

没有的添加,有的不做修改

dicAdd= {'age': 18, 'name': 'xiaobaiyisheng'}

dicAdd.setdefault('妻子')        # '妻子': None 不设置value,None填充
dicAdd.setdefault('兴趣','HGN')  # 添加,没有直接加上

dicAdd.setdefault('age',100) # 直接修改生死簿,走好了您
print(dicAdd)    # 没有拿到判官笔,修改失败

8.3 字典的删除

8.3.1 pop(key,value),有返回值

找到key,删除;找不到,返回错误,如果定义返回值,则返回定义的值

dicAdd= {'age': 18, 'name': 'xiaobaiyisheng'}


print(dicAdd.pop('name'))             # 找到要删除的key,删除
print(dicAdd.pop('name1'))            # 找不到要删除的key,报错

print(dicAdd.pop('name','meiyou'))    # 找到要删除的key,返回key
print(dicAdd.pop('name1','meiyou'))   # 找不到要删除的key,返回自定的value

print(dicAdd)

8.3.2 pop.item()

自后向前删,有返回值,无参; 老版本是随机删除,返回被删除的键值组成的元组

dicAdd= {'age': 18, 'name': 'xiaobaiyisheng'}
print(dicAdd.popitem())   # 被删除内容,('name', 'xiaobaiyisheng')
print(dicAdd.popitem())   # 被删除内容,('age', 18)
print(dicAdd.popitem())   # popitem(): dictionary is empty

# 不要尝试添加参数,这是不理智的
print(dicAdd.popitem('age'))   # TypeError: popitem() takes no arguments (1 given)

8.3.3 clear()

8.3.4 del

删除,无返回值

dicAdd= {'age': 18, 'name': 'xiaobaiyisheng'}
del dicAdd
del dicAdd['age']

8.4 改

8.4.1 覆盖

8.4.2 update()

值不同的进行更新,key没有的进行添加

dic = {"name":"xiaobai","age":18,"sex":"man"}
dic2 = {"name":"xiaobaiyisheng","weight":75}

dic.update(dic2)  # dic 来保存 dic2的更新
print(dic,dic2)

8.5 查

8.5.1 打印字典

dic = {"name":"xiaobai","age":18,"sex":"man"}

print(dic.keys(),type(dic.keys()))       # key 组成的 列表
print(dic.values(),type(dic.values()))   # value 组成的列表
print(dic.items(),type(dic.items()))     # key和值组成的,元祖形式组成的列表

打印键值

dic = {"name":"xiaobai","age":18,"sex":"man"}
for i in dic.items():
    print(i)

for k,v in dic.items():
    print(k,v)

8.5.2 get() 根据key找

根据key取值,默认取不到返回错误,可以指定返回值

dic = {"name":"xiaobai","age":18,"sex":"man"}

dic.get('name1')       # error
print(dic.get('name1',1))
print(dic.get('name',1))
print(dic)

8.6 字典的嵌套

示例列表

dic = {
    'name': ['zhangsan', 'lisi', 'wangwu'],
    '11': {
        'time': '1213',
        'learn_money': 19800,
        'addr': 'CBD'
    },
    'age': 21
}

8.6.1 添加

#  name 列添加 zhaoliu
print(dic['name'].append('zhaoliu'))
print(dic)

#  在 11 的字典 里,添加 一个键值对
dic['11'].setdefault('女生',6)
dic['11']['男生']=7
print(dic)

8.6.2 修改

# 修改 age 30
dic['age'] = 210

# lisi 大写
dic['name'][1]=dic['name'][1].upper()
print(dic)

九. 集合

集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的。
以下是集合最重要的两点:

  • 去重,把一个列表变成集合,就自动去重了。
  • 关系测试,测试两组数据之前的交集、差集、并集等关系。

9.1 集合的声明

set1 = set({1,2,3,4,'1',(1,2,3,),True,'AAA','AAA',False,3})
print(set1)   
# {'1', 1, 2, 3, 4, False, (1, 2, 3)}
# 并没有打印 True
# 集合是无序的
# 集合是不重复的 

尝试在集合中包含可变类型数据

# set2={1,2,3,[2,3],{'name':123}}
# print(set2)   # TypeError: unhashable type: 'list'

set3={1,2,3,{'name':123}}
print(set3)    # TypeError: unhashable type: 'dict'

9.2 增

9.2.1 add()

set1 ={'ZHAO','QIAN','SUN','LI'}
set1.add('zhou')
print(set1)

9.2.2 update 迭代添加

传递一个可迭代对象的时候,会依次添加的

set1 ={'ZHAO','QIAN','SUN','LI'}

set1.update('123')
print(set1)

# {'2', 'zhou', 'SUN', '3', 'LI', 'QIAN', 'ZHAO', '1'}
set1.update([1,2,'33'])
print(set1)

# {1, 2, 'SUN', 'QIAN', '33', 'LI', 'ZHAO'}

9.3 删

9.3.1 pop() 随机删除

set1 ={'ZHAO','QIAN','SUN','LI'}
set1.pop()
print(set1)   # 每次执行,删除的结果都不一样

9.3.2 clear() 清空

简单的讲,就是值没有了

set1 ={'ZHAO','QIAN','SUN','LI'}
# set1.pop()
# print(set1.pop())
set1.clear()

9.3.3 del set 删除

del set1 
# 删了就没有了

9.3.4 查 循环便利

set1 = set({1,2,3,4,'1',(1,2,3,),True,'AAA','AAA',False,3})
for i in set1:
    print(i)

9.4 交集  (&  或者 intersection)

A 有,B也有

SET1 = {1,2,3,4,5}
SET2 = {4,5,6,7,8}

print(SET1 & SET2)   
print(SET1.intersection(SET2))

# {4, 5}

9.5 并集 (| 或者 union)

A 和 B 共有

set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}

print(set1 | set2)
print(set1.union(set2))

# {1, 2, 3, 4, 5, 6, 7, 8}

9.6 差集 (- 或者 difference)

差集 A 有 B 没有

set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}

# 差集 A 有 B 没有
print(set1-set2)
print(set1.difference(set2))

# {1, 2, 3}

9.7 反交集 (^ 或者 symmetric_difference)

A 和 B 相互独立的元素的集合

set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}

#(^ 或者 symmetric_difference)
# A 和 B 相互独立的元素的集合 
print(set1 ^ set2)
print(set1.symmetric_difference(set2))

# {1, 2, 3, 6, 7, 8}

9.8 子集与超集

set1 = {1,2,3}
set2 = {1,2,3,4,5,6}

# 子集 <
print(set1 < set2)
print(set1.issubset(set2))

# 超集 >
print(set2 > set1)
print(set2.issuperset(set1))

9.9 小例子

9.9.1 列表去重

li = [1,2,33,33,2,1,4,5,6,6]

print(list(set(li)))

9.10 forzenset() 不可变集合

不可变集合

s = frozenset('barry')
print(s,type(s))  # frozenset({'a', 'y', 'b', 'r'}) <class 'frozenset'>

十. 基础数据类型总结

10.1 按存储空间的占用分(从低到高)

数字
字符串
集合:无序,即无序存索引相关信息
元组:有序,需要存索引相关信息,不可变
列表:有序,需要存索引相关信息,可变,需要处理数据的增删改
字典:无序,需要存key与value映射的相关信息,可变,需要处理数据的增删改

10.2 按可变不可变区分

可变 列表,字符串
不可变 数字,字符串,元组,布尔值

10.3 按访问顺序区分

直接访问 数字
顺序访问(序列类型) 字符串,列表,元组
key值访问(映射类型) 字典

十一. 其它

11.1 for循环

用户按照顺序循环可迭代对象的内容

msg='人之初,行本事,性相近,习相远'

for i in msg:
    print(i)
    
msg='人之初,行本事,性相近,习相远'

li = msg.split(',')

for i in li:
    print(i)

dic={
    'xing':['zhao','qian','sun','li'],
    'name':[1,2,3,4]
}

for k,v in dic.items():
    print(k,v)

11.2 enumerate:枚举

对于一个可迭代的(iterable)/ 可遍历的对象(如列表、字符串),enumerate将其组成一个索引序列,利用它可以同时获得索引和值

msg=['人之初','行本事','性相近','习相远']

for i in enumerate (msg):
    print(i)

for index,name in enumerate(msg,1):
    print(index,name)

for index,name in enumerate(msg,100):
    print(index,name)

11.3 range

指定反问,生成指定数字

for i in range(1,10):
    print(i)

for i in range(1,10,2):  # 步长
    print(i)

for i in range(10,1,-2): # 反向步长
    print(i)
原文地址:https://www.cnblogs.com/liudianer/p/10299782.html