1.3-python基础数据类型


python基础数据类型

1. 什么是数据类型

Python中常用的数据类型如下:

  1. int 数字,主要用于运算;
  2. bool 布尔,判断真假:True,False;
  3. str 字符串,简单少量的存储数据,并进行相应的操作;
  4. tuple 元组,只读不能更改;
  5. list 列表,大量有序数据;
  6. dict 字典,大量数据,且是关联性比较强的数据;

2. 基础数据类型

2.1 数字 int

主要用于算数运算。

将十进制转化成二进制

print(bin(100))
# 0b1100100

将二进制转化成十进制

print(int("1100100",2))
# 100

2.2 布尔值bool

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

真 1 True,假 0 False

# int str bool 三者数据类型之间的转换
# int --> book
i = 100
print(bool(i))  # True  非零即为True
l = 0
print(bool(l))  # False 零即为False
# book --> int
x = True
print(int(x))       # 1
y = False
print(int(y))       # 0


# int --> str
i = 100
print(str(i),type(str(i)))       # 100 <class 'str'>
# str --> int
l = "100"
print(int(l),type(int(l)))       # 100 <class 'int'>


# str --> bool
s = '黑色利穆'
z = ''
print(bool(s))      # True      # 非空即为True
print(bool(z))      # False
# bool --> str
t = True
print(bool(t))      # True

2.3 字符串 str

python中引号引起来的都可以称为字符串类型,组成字符串的每个元素称为字符,将这些字符一个个连接起来然后引号引起来就是字符串。

s = '黑色利穆'
对于s这个字符串来说,它由四个字符组成:黑 色 利 穆

2.3.1 字符串的索引与切片

组成字符串的字符从左向右,依次排列(0,1,2,3,.....)

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

s = "ABCDEFGHIJK"
print(s[0])
print(s[1])
print(s[3])
print(s[5])
print(s[6])

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

s = "ABCDEFGHIJK"
print(s[0:3])
print(s[:3])    # 0开始可以默认不写
print(s[3:4])
print(s[:])     # 默认到最后
print(s[:-1])   # -1 列表中最后元素的索引,但是满足顾头不顾尾,所以取不到最后一位元素
print(s[:7:2])  # 设置步长为2
print(s[-1:-5:-2])  # 反向步长

2.3.2 字符串常用方法

# 字符串中元素出现的个数
a = "aaabbbcccabcabcabc"
ret = a.count("a", 0, -1)  # 可切片
print(ret)


# startswith    判断是否以...开头
# endswith      判断是否以...结尾
a = 'abcfdef'
ret = a.endswith('f', 1, 4)  # 顾头不顾尾
print(ret)      # True
ret2 = a.startswith('c', 2, 6)
print(ret2)     # True


# split 以...分割,最终形成一个列表,此列表不含有这个分割的元素
s = "heiselimu,heisenaiyou,heiseqiaokeli"
print(s.split('i'))
# ['he', 'sel', 'mu,he', 'sena', 'you,he', 'seq', 'aokel', '']
print(s.split('i', 2))
# ['he', 'sel', 'mu,heisenaiyou,heiseqiaokeli']



# format的三种,格式化输出
msg = '{} {} {}'.format('黑色利穆', 25, 'OPS')
print(msg)      # 黑色利穆 25 OPS
msg = '{1} {0} {1}'.format('黑色利穆', 25, 'OPS')
print(msg)      # 25 黑色利穆 25
msg = '{name} {age} {job}'.format(name='黑色利穆', age=25, job='OPS')
print(msg)      # 黑色利穆 25 OPS



# strip   脱
name = '***黑色利穆***'
print(name.strip('*'))      # 黑色利穆
print(name.lstrip('*'))     # 黑色利穆***
print(name.rstrip('*'))     # ***黑色利穆



# replace   替换
name = '黑色利穆是世界上最帅的男人,世界上'
print(name.replace('世界', '地球', 1))
# 黑色利穆是地球上最帅的男人,世界上
print(name.replace('世界', '地球', 2))
# 黑色利穆是地球上最帅的男人,地球上



# is系列
name = '黑色利穆123a'
print(name.isalnum())   # True  字符串由字母数字组成
print(name.isalpha())   # False 字符串只由字母组成
print(name.isdecimal()) # False 字符串只由十进制组成



# find index 寻找字符串中元素是否存在
s = '我就是黑色的黑色利穆'
print(s.find('黑', 0, 5))       # 找到返回元素索引,找不到返回 -1
print(s.index('黑', 5, 8))       # 找到返回元素索引,找不到报错



# captalize, swapcase, title
name = "heiselimu"
print(name.capitalize())    # Heiselimu 首字母大写
name = "HeiSeLiMu"
print(name.swapcase())      # hEIsElImU 大小写反转
name = "hei se li mu"
print(name.title())         # Hei Se Li Mu 每个单词的首字母大写


# 内同居中,空白处填充
s = "黑色利穆"
print(s.center(20, "-"))
# --------黑色利穆--------

2.4 列表list

列表属于容器类的数据类型,可以承载多种数据类型(字符串,数字,布尔值,列表,集合,元组,字典),可以储存大量数据;

列表是有序的,有索引值,可切片

不管什么类型进行切片的时候获取到的都是源数据类型;

2.4.1 列表的创建

三种方式

# 直接创建
l1 = [1, 2, '黑色利穆']

# 空列表,迭代对象迭代如列表
l1 = list('黑色利穆')
print(l1)   # ['黑', '色', '利', '穆']

# 列表推导式
l1 = [i for i in range(1,5)]
print(l1)   # [1, 2, 3, 4]

2.4.2 列表的索引切片

l1 = ['黑色利穆', 1, 123, 'abc', 'ccc']
print(l1[0])        # 黑色利穆
print(l1[-1])       # ccc
print(l1[1:3])      # [1, 123]
print(l1[:-1])      # ['黑色利穆', 1, 123, 'abc']
print(l1[::2])      # ['黑色利穆', 123, 'ccc']
print(l1[::-1])     # ['ccc', 'abc', 123, 1, '黑色利穆']

练习

'''
li = [1, 3, 2, "a", 4, "b", 5,"c"]
通过对li列表的切片形成新的列表l1,l1 = [1,3,2]
通过对li列表的切片形成新的列表l2,l2 = ["a",4,"b"]
通过对li列表的切片形成新的列表l3,l3 = [3,"a","b"]
通过对li列表的切片形成新的列表l4,l4 = ["b","a",3]
'''
li = [1, 3, 2, "a", 4, "b", 5,"c"]
l1 = li[:3]
print(l1)
l2 = li[3:6]
print(l2)
l3 = li[1:-1:2]
print(l3)
l4 = li[-3:-8:-2]
print(l4)

2.4.3 增

# append 追加,给列表的最后追加一个元素
l = [1, 2, 'a']
l.append(777)
print(l)        # [1, 2, 'a', 777]


# insert 插入,列表的任意位置插入元素
l.insert(1, '黑色利穆')
print(l)    # [1, '黑色利穆', 2, 'a', 777]


# extend 迭代着追加,在列表的最后面迭代追加一组数据
l.extend('小明')
print(l)        # [1, '黑色利穆', 2, 'a', 777, '小', '明']

2.4.4 删

# pop 通过索引删除列表中对应的元素,返回值位删除的元素
l = [1, '黑色利穆', 2, 'a', 777, '小', '明']
ret = l.pop(1)
print(ret)     # 黑色利穆


# remove 通过元素删除列表中该元素
l.remove(777)
print(l)        # [1, 2, 'a', '小', '明']


# clear 清空列表
l.clear()
print(l)        # []


# del 按照索引删除该元素
l = [1, '黑色利穆', 2, 'a', 777, '小', '明']
del l[2]
print(l)        # [1, '黑色利穆', 'a', 777, '小', '明']

# 切片删除该元素
l = [1, '黑色利穆', 2, 'a', 777, '小', '明']
del l[2:]
print(l)        # [1, '黑色利穆']

# 切片(步长)删除该元素
l = [1, '黑色利穆', 2, 'a', 777, '小', '明']
del l[::2]
print(l)    # ['黑色利穆', 'a', '小']

2.4.5 改

# 按照索引改值
l = [1, '黑色利穆', 2, 'a', 777, '小', '明']
l[0] = 'abcd'
print(l)        # ['abcd', '黑色利穆', 2, 'a', 777, '小', '明']


# 按照切片改值(迭代增加)
l = [1, '黑色利穆', 2, 'a', 777, '小', '明']
l[1:3] = 'ab'
print(l)    # [1, 'a', 'b', 'a', 777, '小', '明']


# 按照切片(步长)改值,必须一一对应
l = [1, '黑色利穆', 2, 'a', 777, '小', '明']
l[::2] = "一一对应"
print(l)    # ['一', '黑色利穆', '一', 'a', '对', '小', '应']

2.4.6 查

切片查,循环查

2.4.7 其他操作

# count (统计元素在列表中出现的次数)
a = ["a", "b", "c", "a", "a", "c", "c"]
print(a.count("a"))


# index (从列表中找出某个值第一个匹配项的索引位置)
print(a.index("c"))


# sort(在原位置对列表进行排序)
# reverse(将列表中元素反向存放)
a = [1, 3, 123, 7, 191, 98, 13]
a.sort()
print(a)        # [1, 3, 7, 13, 98, 123, 191]
a.reverse()
print(a)        # [191, 123, 98, 13, 7, 3, 1]



# 列表也可以相加与整数相乘
l1 = [1, 2, 3]
l2 = [4, 5, 6]
print(l1 + l2)      # [1, 2, 3, 4, 5, 6]
print(l1 * 3)       # [1, 2, 3, 1, 2, 3, 1, 2, 3]

2.4.8 列表的嵌套

'''
l1 = [1, 2, 'hello', [3, 4, '黑色利穆']]
1, 将l1中的'hello'变成大写并放回原处。
2,给小列表[3, 4, '黑色利穆']追加一个元素,'nb'。
3,将列表中的'黑色利穆'通过字符串拼接的方式在列表中变成'黑色利穆最厉害'
'''
l1 = [1, 2, 'hello', [3, 4, '黑色利穆']]
l1[2] = l1[2].upper()
print(l1)
# [1, 2, 'HELLO', [3, 4, '黑色利穆']]

l1[-1].append('nb')
print(l1)
# [1, 2, 'HELLO', [3, 4, '黑色利穆', 'nb']]

l1[-1][-2] = l1[-1][-2] + '最厉害'
print(l1)
# [1, 2, 'HELLO', [3, 4, '黑色利穆最厉害', 'nb']]

2.4.9 练习

'''
li = ["xiaoming", "zhangsan", "lisi", "heiselimu", "marry"]
计算列表的长度并输出
列表中追加元素"seven",并输出添加后的列表
请在列表的第1个位置插入元素"Tony",并输出添加后的列表
请修改列表第2个位置的元素为"Kelly",并输出修改后的列表
请将列表l2=[1,"a",3,4,"heart"]的每一个元素添加到列表li中,一行代码实现,不允许循环添加。
请将字符串s = "abcd"的每一个元素添加到列表li中,一行代码实现,不允许循环添加。
请删除列表中的元素"lisi",并输出删除后的列表
请删除列表中的第2个元素,并输出删除的元素和删除元素后的列表
请删除列表中的第2至4个元素,并输出删除元素后的列表
'''
li = ["xiaoming", "zhangsan", "lisi", "heiselimu", "marry"]
print(len(li))      # 5

li.append('seven')
print(li)       # ['xiaoming', 'zhangsan', 'lisi', 'heiselimu', 'marry', 'seven']

li.insert(1, "Tony")
print(li)       # ['xiaoming', 'Tony', 'zhangsan', 'lisi', 'heiselimu', 'marry', 'seven']


li[2] = 'Kelly'
print(li)       # ['xiaoming', 'Tony', 'Kelly', 'lisi', 'heiselimu', 'marry', 'seven']

l2 = [1, "a", 3, 4, "heart"]
print(li + l2)
# ['xiaoming', 'Tony', 'Kelly', 'lisi', 'heiselimu', 'marry', 'seven', 1, 'a', 3, 4, 'heart']

s = "abcd"
print(li + list(s))
# ['xiaoming', 'Tony', 'Kelly', 'lisi', 'heiselimu', 'marry', 'seven', 'a', 'b', 'c', 'd']

li.remove('lisi')
print(li)       # ['xiaoming', 'Tony', 'Kelly', 'heiselimu', 'marry', 'seven']

ret = li.pop(2)
print("删除的元素:",ret, "删除后的列表:", li)
# 删除的元素: Kelly 删除后的列表: ['xiaoming', 'Tony', 'heiselimu', 'marry', 'seven']

del li[2:4]
print(li)       # ['xiaoming', 'Tony', 'seven']
'''
相应练习题
lis = [2, 3, "k", ["qwe", 20, ["k1", ["tt", 3, "1"]], 89], "ab", "adv"]
将列表lis中的"tt"变成大写(用两种方式)。
将列表中的数字3变成字符串"100"(用两种方式)。
将列表中的字符串"1"变成数字101(用两种方式)。
'''
lis = [2, 3, "k", ["qwe", 20, ["k1", ["tt", 3, "1"]], 89], "ab", "adv"]
# 方法一
lis[-3][-2][-1][0] = lis[-3][-2][-1][0].upper()
print(lis)
# [2, 3, 'k', ['qwe', 20, ['k1', ['TT', 3, '1']], 89], 'ab', 'adv']
# 方法二
lis[3][2][1][0] = lis[3][2][1][0].upper()
print(lis)

# 方法一
lis[1] = "100"
lis[3][2][1][1] = "100"
print(lis)
# [2, '100', 'k', ['qwe', 20, ['k1', ['TT', '100', '1']], 89], 'ab', 'adv']
# 方法二
lis[-5] = "100"
lis[-3][-2][-1][-2] = "100"
print(lis)

# 方法一
lis[3][2][1][2] = 101
print(lis)
# [2, '100', 'k', ['qwe', 20, ['k1', ['TT', '100', 101]], 89], 'ab', 'adv']

# 方法二
lis[-3][-2][-1][-1] = 101
print(lis)

2.4.10 用途

列表用途:

需要存储大量的数据,且需要这些数据有序的时候;

制定一些特殊的数据群体:按顺序,按规则,自定制数据。

2.5 tuple 元组

对于容器型数据类型list,无论谁都可以进行增删改查,重要数据放在list中是不安全的。所以需要一种存放重要数据的容器类数据类型,只能查看而不能增删改,这种数据类型就是元组;

元组:不可变的列表(只读列表),python的基本数据类型之一,小括号括起来。可以存放任何数据类型的数据,可以查询,循环,切片。不可以改;

元组的索引切片

tu1 = ('a', 'b', '黑色利穆', 777)
print(tu1[0])           # a
print(tu1[-1])          # 777
print(tu1[1:3])         # ('b', '黑色利穆')
print(tu1[:-1])         # ('a', 'b', '黑色利穆')
print(tu1[::2])         # ('a', '黑色利穆')
print(tu1[::-1])        # (777, '黑色利穆', 'b', 'a')

index: 通过元素找索引(可切片)

tu1 = ('a', 'b', '黑色利穆', 777)
print(tu1.index('黑色利穆'))        # 2

count:获取元素在列表中出现的次数

tu1 = ('a', 777, 'b', 777, '黑色利穆', 777)
print(tu1.count(777))           # 3

len

tu1 = ('a', 777, 'b', 777, '黑色利穆', 777)
print(len(tu1))     # 6

用途:

将一些非常重要的且不可改动的数据放在元组中,只供查看;

常用于元组拆包;

2.6 dict 字典

字典是python语言中的映射类型,是以{}括起来的,里面的内容是以键值对的形式储存的:

key:不可变(可哈希)的数据类型,并且键是唯一的,不重复的;

value:任意数据(int,str,bool,tuple,list,dict,set)包括实例对象等;

python3.5版本之前,字典是无序的;3.6版本开始,字典会按照初建字典的顺序排列。字典的缺点是内存消耗巨大;

2.6.1 创建字典的集中方法

# 方法一:
dic = dict((('one', 1), ('two', 2), ('three', 3)))
# dic = dict([('one', 1), ('two', 2), ('three', 3)])
print(dic)
# {'one': 1, 'two': 2, 'three': 3}

# 方法二:
dic = dict(one=1, two=2, three=3)
print(dic)

# 方法三:
dic = dict({'one': 1, 'two': 2, 'three': 3})
print(dic)

# 方法四:
dic = dict(zip(['one', 'two', 'three'], [1, 2, 3]))
print(dic)

# 方法五:
dic = { k: v for k, v in [('one', 1), ('two', 2), ('three', 3)]}
print(dic)

# 方法六:
dic = dict.fromkeys('abcd', '黑色利穆')
print(dic)
# {'a': '黑色利穆', 'b': '黑色利穆', 'c': '黑色利穆', 'd': '黑色利穆'}

2.6.2 验证字典的合法性

# 合法
dic = {123: 456, True: 777, 'id': 3, 'name': 'hslm', 'stu': ['xm', 'xh', 'xg'], (1, 2, 3): 'xl'}
print(dic[123])
print(dic[True])
print(dic['id'])
print(dic['name'])
print(dic['stu'])
print(dic[(1, 2, 3)])


# 不合法
# dic = {[1, 2, 3]: 456}  # list是可变的,不能作为key
# dic = {{1: 2}: 234}     # dict是可变的,不能作为key
# dic = {{1, 2, 3}: 234}  # set是可变的,不能作为key

2.6.3 字典的常用操作-增

# 通过键值对直接增加
dic = {'name': '黑色利穆', 'age': 25}
dic['sex'] = 'man'      # 没有sex键,就增加键值对
print(dic)      # {'name': '黑色利穆', 'age': 25, 'sex': 'man'}

dic['name'] = 'xiaoming'    # 有name键,改变字典值
print(dic)      # {'name': 'xiaoming', 'age': 25, 'sex': 'man'}


# setdefault
dic = {'name': '黑色利穆', 'age': 25}
dic.setdefault('sex', 'man')    # 没有sex键,添加
print(dic)      # {'name': '黑色利穆', 'age': 25, 'sex': 'man'}
dic.setdefault('name', 'xiaoming')  # 有name键,不改变
print(dic)      # {'name': '黑色利穆', 'age': 25, 'sex': 'man'}

# 返回值
dic = {'name': '黑色利穆', 'age': 25}
ret = dic.setdefault('name')
print(ret)      # 黑色利穆

2.6.4 删

# pop 通过key删除字典的键值对,有返回值,可设置返回值
dic = {'name': '黑色利穆', 'age': 25}
ret = dic.pop('name')
print(ret, dic)     # 黑色利穆 {'age': 25}

ret1 = dic.pop('n', None)
print(ret1, dic)    # None {'age': 25}


# popitem 3.5之前为随机删除,3.6之后删除最后一个,有返回值
dic = {'name': '黑色利穆', 'age': 25}
ret = dic.popitem()
print(ret, dic)     # ('age', 25) {'name': '黑色利穆'}


# clear 清空字典
dic = {'name': '黑色利穆', 'age': 25}
dic.clear()
print(dic)      # {}


# del   通过键删除键值对
dic = {'name': '黑色利穆', 'age': 25}
del dic['name']
print(dic)      # {'age': 25}
# 删除整个字典
del dic

2.6.5 改

# 通过键值对直接改
dic = {'name': '黑色利穆', 'age': 25}
dic['name'] = 'xm'
print(dic)      # {'name': 'xm', 'age': 25}


# update
dic = {'name': '黑色利穆', 'age': 25}
dic.update(sex='man', height=175)
print(dic)
# {'name': '黑色利穆', 'age': 25, 'sex': 'man', 'height': 175}
dic.update([(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd')])
print(dic)
# {'name': '黑色利穆', 'age': 25, 'sex': 'man', 'height': 175, 1: 'a', 2: 'b', 3: 'c', 4: 'd'}

dic1 = {'name': 'xm', 'age': 20, 'sex': 'man'}
dic2 = {'name': 'zs', 'weight': 80}
dic1.update(dic2)
print(dic1)     # {'name': 'zs', 'age': 20, 'sex': 'man', 'weight': 80}
print(dic2)     # {'name': 'zs', 'weight': 80}

2.6.6 查

# 通过键查询,直接dict[key] 没有键会报错
dic = {'name': '黑色利穆', 'age': 25}
print(dic['name'])      # 黑色利穆


# get
dic = {'name': '黑色利穆', 'age': 25}
v = dic.get('name')
print(v)    # 黑色利穆
v1 = dic.get('name1')
print(v1)   # None
v2 = dic.get('name2', '没有此键')
print(v2)   # 没有此键


# keys()
dic = {'name': '黑色利穆', 'age': 25}
print(dic.keys())       # dict_keys(['name', 'age'])

# values()
dic = {'name': '黑色利穆', 'age': 25}
print(dic.values())     # dict_values(['黑色利穆', 25])


# items()
dic = {'name': '黑色利穆', 'age': 25}
print(dic.items())      # dict_items([('name', '黑色利穆'), ('age', 25)])

练习

'''
dic = {'k1': "v1", "k2": "v2", "k3": [11,22,33]}
请在字典中添加一个键值对,"k4": "v4",输出添加后的字典
请在修改字典中 "k1" 对应的值为 "alex",输出修改后的字典
请在k3对应的值中追加一个元素 44,输出修改后的字典
请在k3对应的值的第 1 个位置插入个元素 18,输出修改后的字典
'''
dic = {'k1': "v1", "k2": "v2", "k3": [11,22,33]}

dic['k4'] = 'v4'
print(dic)
# {'k1': 'v1', 'k2': 'v2', 'k3': [11, 22, 33], 'k4': 'v4'}

dic['k1'] = '黑色利穆'
print(dic)
# {'k1': '黑色利穆', 'k2': 'v2', 'k3': [11, 22, 33], 'k4': 'v4'}

dic['k3'].append(44)
print(dic)
# {'k1': '黑色利穆', 'k2': 'v2', 'k3': [11, 22, 33, 44], 'k4': 'v4'}

dic['k3'].insert(1, 18)
print(dic)
# {'k1': '黑色利穆', 'k2': 'v2', 'k3': [11, 18, 22, 33, 44], 'k4': 'v4'}

2.6.7 其他操作

# fromkeys
dic = dict.fromkeys('abcd', '黑色利穆')
print(dic)
# {'a': '黑色利穆', 'b': '黑色利穆', 'c': '黑色利穆', 'd': '黑色利穆'}

dic = dict.fromkeys([1, 2, 3], '黑色利穆')
print(dic)
# {1: '黑色利穆', 2: '黑色利穆', 3: '黑色利穆'}


# 高仿列表,存放的都是字典的key
dic = dict.fromkeys('abcd', '黑色利穆')
key_list = dic.keys()
print(key_list)
# dict_keys(['a', 'b', 'c', 'd'])
print(list(key_list))       # 高仿列表可以转化成列表
# ['a', 'b', 'c', 'd']


# 可以循环打印
dic = {'小明': 99, '小红': 97, '小刚': 100}
for i in dic:
    print(i)
# 小明
# 小红
# 小刚
value_list = dic.values()
print(value_list)   # dict_values([99, 97, 100])
# 一个高仿里诶包,存放的都是字典中的value,并且这个高仿列表可以转化成字典
print(list(value_list))     # [99, 97, 100]

# 可以循环打印
for i in dic.values():
    print(i)
# 99
# 97
# 100


key_value_list = dic.items()
print(key_value_list)
# dict_items([('小明', 99), ('小红', 97), ('小刚', 100)])

# 一个高仿列表,存放多个元组,元组中第一个是字典的键,第二个是字典的值
# 也可以转化成列表
print(list(key_value_list))
# [('小明', 99), ('小红', 97), ('小刚', 100)]
# 也可以循环打印
for i in dic.items():
    print(i)
# ('小明', 99)
# ('小红', 97)
# ('小刚', 100)

分别赋值,拆包

a, b = 1, 2
print(a, b)       # 1 2

a, b = ('你好', '世界')
print(a, b)       # 你好 世界

a, b = ['黑色', '利穆']
print(a, b)       # 黑色 利穆

a, b = {'黑色': 'heise', '利穆': 'limu'}
print(a, b)       # 黑色 利穆

利用拆包,循环字典时可以获取字典的键,值

dic = {'昨天': 20201127, '今天': 20201128, '明天': 20201129, '今年': 2020
}
for k, v in dic.items():
    print('dic的键是:', k)
    print('dic的值是:', v)
# dic的键是: 昨天
# dic的值是: 20201127
# dic的键是: 今天
# dic的值是: 20201128
# dic的键是: 明天
# dic的值是: 20201129
# dic的键是: 今年
# dic的值是: 2020

2.6.8 字典的嵌套

'''
dic = {
    'name':'汪峰',
    'age':48,
    'wife':[{'name':'国际章','age':38}],
    'children':{'girl_first':'小苹果', 'girl_second':'小怡', 'girl_three':'顶顶'}
}
1. 获取汪峰的名字。
2.获取这个字典:{'name':'国际章','age':38}。
3. 获取汪峰妻子的名字。
4. 获取汪峰的第三个孩子名字。
'''
dic = {
    'name':'汪峰',
    'age':48,
    'wife':[{'name':'国际章','age':38}],
    'children':{'girl_first':'小苹果', 'girl_second':'小怡', 'girl_three':'顶顶'}
}
print(dic['name'])      # 汪峰
print(dic['wife'][0])   # {'name': '国际章', 'age': 38}
print(dic['wife'][0]['name'])       # 国际章
print(dic['children']['girl_three'])        #  顶顶
'''
dic1 = {
    'name': ['heiselimu', 2, 3, 5],
    'job': 'OPS',
    'trait': {'heiselimu': ['善良', '温柔', 666]}
 }
1,将name对应的列表追加⼀个元素’xiaoming’。
2,将name对应的列表中的alex⾸字⺟⼤写。
3,trait对应的字典加⼀个键值对’sex’,’man’。
4,将trait对应的字典中的heiselimu对应的列表中的‘温柔’删除
'''
dic1 = {
    'name': ['heiselimu', 2, 3, 5],
    'job': 'OPS',
    'trait': {'heiselimu': ['善良', '温柔', 666]}
 }

dic1['name'].append('xiaoming')
print(dic1)
# {'name': ['heiselimu', 2, 3, 5, 'xiaoming'], 'job': 'OPS', 'trait': {'heiselimu': ['善良', '温柔', 666]}}

dic1['name'][0] = dic1['name'][0].capitalize()
print(dic1)
# {'name': ['Heiselimu', 2, 3, 5, 'xiaoming'], 'job': 'OPS', 'trait': {'heiselimu': ['善良', '温柔', 666]}}

dic1['trait']['sex'] = 'man'
print(dic1)
# {'name': ['Heiselimu', 2, 3, 5, 'xiaoming'], 'job': 'OPS', 'trait': {'heiselimu': ['善良', '温柔', 666], 'sex': 'man'}}

del dic1['trait']['heiselimu'][1]
print(dic1)
# {'name': ['Heiselimu', 2, 3, 5, 'xiaoming'], 'job': 'OPS', 'trait': {'heiselimu': ['善良', 666], 'sex': 'man'}}

2.7 set 集合

集合是无序的,不重复的数据集合,它里边的元素是可哈希(不可变类型),但是集合本身不可哈希。

天然去重;测试交集,差集,并集等关系;

2.7.1 集合的创建

set1 = set({1, 2, 'heiselimu'})
set2 = {1, 2, 'heselimu'}
print(set1, set2)
# {'heiselimu', 1, 2} {1, 2, 'heselimu'}

2.7.2 集合的增

set1 = {'张三', '李四', '王五', '小明'}
set1.add('小红')
print(set1)
# {'张三', '李四', '王五', '小红', '小明'}

# update 迭代增加
set1.update('A')
print(set1) # {'李四', 'A', '张三', '王五', '小明', '小红'}
set1.update('abc')
print(set1) # {'b', 'A', '李四', 'a', '小红', '小明', '王五', 'c', '张三'}
set1.update([1, 2, 3])
print(set1) # {1, 2, '小红', '王五', 3, 'A', '张三', '小明', 'a', 'c', 'b', '李四'}

2.7.3 集合的删

set1 = {'张三', '李四', '王五', '小明'}
set1.remove('王五')       # 删除一个元素
print(set1)     # {'张三', '小明', '李四'}

set1.pop()      # 随机删除一个元素
print(set1)     # {'小明', '李四'}

set1.clear()    # 清空集合
print(set1)     # set()

del set1        #删除集合

2.7.4 集合的其他操作

# 交集   & 或者 intersection
set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7, 8}
print(set1 & set2)      # {4, 5}
print(set1.intersection(set2))


# 并集  | 或者 union
print(set1 | set2)      # {1, 2, 3, 4, 5, 6, 7, 8}
print(set1.union(set2))


# 差集  - 或者 difference
print(set1 - set2)      # {1, 2, 3}
print(set1.difference(set2))


# 反交集  ^ 或者 symmetric_difference
print(set1 ^ set2)      # {1, 2, 3, 6, 7, 8}
print(set1.symmetric_difference(set2))


# 子集 与 超集
set1 = {1, 2, 3}
set2 = {1, 2, 3, 4, 5}
print(set1 < set2)          # True  说明set1是set2的子集
print(set1.issubset(set2))

print(set2> set1)
print(set2.issuperset(set2))        # True  说明set2 是set1 的超集

3 其他 for, enumerate, range

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

msg = '黑色利穆是最帅的男人'
for i in msg:
    print(i)
# 黑
# 色
# 利
# 穆
# 是
# 最
# 帅
# 的
# 男
# 人

li = ['黑色', '利穆', '是最帅', '的男人']
for i in li:
    print(i)
# 黑色
# 利穆
# 是最帅
# 的男人

dic = {'name': 'heiselimu', 'age': 25, 'job': 'OPS'}
for k, v in dic.items():
    print(k, v)
# name heiselimu
# age 25
# job OPS

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

li = ['黑色', '利穆', '是最帅', '的男人']
for i in enumerate(li):
    print(i)
# (0, '黑色')
# (1, '利穆')
# (2, '是最帅')
# (3, '的男人')

for index, name in enumerate(li, 1):
    print(index, name)
# 1 黑色
# 2 利穆
# 3 是最帅
# 4 的男人

for index, name in enumerate(li, 100):      # 起始位默认是0,可改变
    print(index, name)
# 100 黑色
# 101 利穆
# 102 是最帅
# 103 的男人

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)

利用len和range打印列表索引:

li = ['黑色', '利穆', '是最帅', '的男人']
for i in range(len(li)):
    print(i)
posted @ 2020-11-28 14:01  黑色利穆  阅读(77)  评论(0编辑  收藏  举报