基本数据类型及内置方法

整型(int)

  1、类型转换

num = '123'
print(type(num))    #<class 'str'>
num = int(num)
print(type(num))    #<class 'int'>

  ps:int在类型转换的时候,只能转换纯整数数字。不识别小数点、以及数字之外的数据

  2、进制数转换

print(bin(100))  # 将十进制的100转换成二进制  0b1100100
print(oct(100))  # 将十进制的100转换成八进制  0o144
print(hex(100))  # 将十进制的100转换成十六进制  0x64
# 0b开头为二进制数  0o开头为八进制数  0x开头为十六进制数
print(int('0b1100100', 2))  # 100
print(int('0o144', 8))  # 100
print(int('0x64', 16))  # 100

浮点型(float)

  类型转换

num = '12.3'
print(type(num))    # <class 'str'>
num = float(num)
print(type(num))    # <class 'float'>

字符串(str)

  1、类型转换

# 整型
num = 123
print(type(num))    # <class 'int'>
num = str(num)
print(type(num))    # <class 'str'>
# 浮点型
num = 12.3
print(type(num))    # <class 'float'>
num = str(num)
print(type(num))    # <class 'str'>
# 列表
num = [111, 222, 333]
print(type(num))    # <class 'list'>
num = str(num)
print(type(num))    # <class 'str'>
# 字典
num = {'k1': 111, 'k2': 222, 'k3': 333}
print(type(num))  # <class 'dict'>
num = str(num)
print(type(num))  # <class 'str'>
# 元组
num = (111, 222, 333)
print(type(num))  # <class 'tuple'>
num = str(num)
print(type(num))  # <class 'str'>
# 集合
num = {111, 222, 333}
print(type(num))  # <class 'set'>
num = str(num)
print(type(num))  # <class 'str'>

  3、使用

    3.1优先掌握的操作

res = 'hello world'
# 1.按索引取值(正向取,反向取.只能取不能改)
# 1.1 正向取(从左往右)
print(res[2])   # l
# 1.2 反向取(负号表示从右往左)
print(res[-4])  # o
# 2.切片(顾头不顾尾,步长)
# 2.1 顾头不顾尾:取出索引为0到8的所有字符
print(res[0:9])     # hello wor
# 2.2 步长:0:9:2,第三个参数2代表步长,会从0开始,每次累加一个2即可,所以会取出索引0、2、4、6、8的字符
print(res[0:9:2])    # hlowr
# 2.3 反向切片
print(res[::-1])  # -1表示从右往左依次取值    #dlrow olleh
# 3.长度len
# 3.1 获取字符串的长度,即字符的个数,但凡存在于引号内的都算作字符)
print(len(res))  # 空格也算字符   # 11
# 4.成员运算 in 和 not in
# 4.1 in:判断hello 是否在 res里面
print('hello' in res)   # True
# 4.2 not in:判断python 是否不在 res里面
print('python' not in res)  # True
# 5.strip移除字符串首尾指定的字符(默认移除空格)
# 5.1 括号内不指定字符,默认移除首尾空白字符(空格、\n、\t)
res1 = '  hello world  '
print(res1.strip())  # hello world
# 5.2 括号内指定字符,移除首尾指定的字符
res2 = '**hello world**'
print(res2.strip('*'))  # hello world
# 6.切分split
# 6.1 括号内不指定字符,默认以空格作为切分符号
res3 = 'hello world'
print(res3.split())  # ['hello', 'world']
# 6.2 括号内指定分隔字符,则按照括号内指定的字符切割字符串
res4 = 'hello*world'
print(res4.split('*'))  # ['hello','world']  注意:split切割得到的结果是列表数据类型
# 7.循环
res5 = 'hello world'
for i in res5:  # 依次取出字符串中每一个字符
    print(i)
# h
# e
# l
# l
# o
# 
# w
# o
# r
# l
# d

    3.2、需要掌握的操作

     strip、lstrip、rstrip(移除指定字符)

name = '***tony***'
print(name.strip('*'))  # tony(strip  移除左右两边的指定字符)
print(name.lstrip('*'))  # tony***(lstrip  移除左边的指定字符)
print(name.rstrip('*'))  # ***tony(rstrip  移除右边的指定字符)

    lower(),upper()(大小写转换)

username = 'MY NAME IS TONY'
print(username.lower())  # my name is tony(lower() 将英文字符串全部变成小写)
username1 = 'my name is tony'
print(username1.upper())  # MY NAME IS TONY(upper() 将英文字符串全部变成大写)
# 判断是否是纯大写
print(res.isupper())
print(res1.isupper())
# 判断是否是纯小写
print(res.islower())
print(res1.islower())

  实际案例

"""实际案例:图片验证码忽略大小写
    思路:全部转大写或者小写再比对
"""
# old_code = 'JaSon123'
# print('这是返回给用户的图片验证码:%s' % old_code)
# new_code = input('请输入验证码>>>:').strip()
# if old_code.upper() == new_code.upper():  # 这里也可以使用lower()
#     print('验证码正确')
# else:
#     print('验证码错误')

   startswith,endswith(判断是否已指定字符开头结尾)

username = 'my name is tony my name is tony my name is tony'
print(username.startswith('m'))  # True(startswith()判断字符串是否以括号内指定的字符开头,结果为布尔值True或False)
print(username.startswith('y'))  # False
print(username.endswith('y'))  # True(endswith()判断字符串是否以括号内指定的字符结尾,结果为布尔值True或False)
print(username.endswith('m'))  # False

    format(格式化输出) 

# 1、与用户交互 占位符 %s,%d
# 2、字符串内置方法 format()
# 第一种方法:相当于占位符
res = 'my name is {}, my age is {}'
print(res.format('tony', 18))  # my name is tony, my age is 18
# 第二种方法:大括号写索引值可以打破顺序,并且可以反复使用相同位置的数据
res1 = '{1} my name is {1} {0}, my age is {0} {1} {0}'
print(res1.format('tony', 18))  # 18 my name is 18 tony, my age is tony 18 tony
# 第三种方法:大括号写变量名
res3 = 'my name is {name}, my age is {age}'
print(res3.format(name='tony', age=18))  # my name is tony, my age is 18
# 占位符于format结合具体情况使用

    split,rsplit(字符切割)

res = '|hello|world|'
print(res.split('|', 1))  # ['', 'hello|world|'] (split会按照从左到右的顺序对字符串进行切分,可以指定切割次数)
print(res.rsplit('|', 1))  # ['|hello|world', ''] (rsplit会按照从右到左的顺序对字符串进行切分,可以指定切割次数

    join(字符串拼接)

# 第一种:字符串相加
print('hello' + 'world')  # helloworld(不推荐)
# 第二种:join方法
l = ['my', 'name', 'is', 'tony' '|']
print('|'.join(l))  # my|name|is|tony|(join会按照指定的符号把字符串进行相加
print('*'.join(l))  # my*name*is*tony|
# 必须是字符串,在python中不同数据类型之间是无法操作的

    replace(替换字符串中指定的字符)

username = 'my name is tony, my age is 18'
print(username.replace('tony', 'tom'))  # my name is tom, my age is 18(字符串tony替换成tom)
username1 = 'my name is tony tony tony, my age is 18'
print(username1.replace('tony', 'tom', 1))  # my name is tom tony tony, my age is 18(替换指定个数的文本)

    isdigit(判断字符串中是否是纯数字)

name = 'tony123'
print(name.isdigit())  # False
age = '18'
print(age.isdigit())  # True

    3.3、需要了解的操作

# 1.find,rfind,index,rindex,count
# 1.1 find:从指定范围内查找子字符串的起始索引,找得到则返回数字1,找不到则返回-1
name = 'tony, tony, tony, tony'
print(name.find('o'))  # 1
print(name.find('o', 2, 9))  # 7
print(name.find('o', 2, 5))  # -1
# 1.2 index:同find,但在找不到时会报错
name1 = 'tom, tom, tom, tom'  # 找不到时,报错ValueError
print(name.index('o', 2, 5))
# 1.3 rfind与 rindex同find与index,顺序不同
name = 'tony, tony, tony, tony'  # 从右往左
print(name.rfind('o'))  # 19
# 1.4 count:统计字符串在大字符串中出现的次数
res = "hello world"
print(res.count('l'))  # 3 统计字符串l出现的次数
print(res.count('l', 1, 10))  # 3 字符串l在索引1~9范围内出现的次数

# # 2.center,ljust, rjust, zfill
name = 'tony'
print(name.center(30, '-'))  # 总宽度为30,字符串居中显示,不够用-填充
#-------------tony - ------------
print(name.ljust(30, '*'))  # 总宽度为30,字符串左对齐显示,不够用*填充
#tony ** ** ** ** ** ** ** ** ** ** ** ** **
print(name.rjust(30, '*'))  # 总宽度为30,字符串右对齐显示,不够用*填充
#** ** ** ** ** ** ** ** ** ** ** ** ** tony
print(name.zfill(50))  # 总宽度为50,字符串右对齐显示,不够用0填充
#0000000000000000000000000000000000000000000000tony

# 3.expandtabs
name = 'hello\tworld'  # \t表示制表符(tab键)
print(name)  # hello    world
print(name.expandtabs(1))  # hello world (修改\t制表符代表的空格数)

# 4.captalize,swapcase,title
# # 4.1 captalize:首字母大写
username = 'my name is tony, my age is 18'
print(username.capitalize())  # My name is tony, my age is 18
# 4.2 swapcase:大小写翻转
mag = 'My name is Tony, my age Is 18'
print(mag.swapcase())  # mY NAME IS tONY, MY AGE iS 18
# 4.3 title:每个单词的首字母大写
res = 'my name is tony, my age is 18'
print(res.title())  # My Name Is Tony, My Age Is 18

# 5.is数字系列
# 在python3中
num1 = b'4'  # bytes
num2 = u'4'  # unicode,python3中无需加u就是unicode
num3 = ''  # 中文数字
num4 = ''  # 罗马数字

# isdigt:bytes,unicode
print(num1.isdigit())  # True
print(num2.isdigit())  # True
print(num3.isdigit())  # False
print(num4.isdigit())  # False

# isdecimal:uncicode(bytes类型无isdecimal方法)
print(num2.isdecimal())  # True
print(num3.isdecimal())  # False
print(num4.isdecimal())  # False

# isnumberic:unicode,中文数字,罗马数字(bytes类型无isnumberic方法)
print(num2.isnumeric())  # True
print(num3.isnumeric())  # True
print(num4.isnumeric())  # True

# 三者不能判断浮点数
num5 = '4.3'
print(num5.isdigit())  # False
print(num5.isdecimal())  # False
print(num5.isnumeric())  # False
'''
# 总结:
#     最常用的是isdigit,可以判断bytes和unicode类型,这也是最常见的数字应用场景
#     如果要判断中文数字或罗马数字,则需要用到isnumeric。
'''

# 6.is其他
name = 'tony123'
print(name.isalnum())  # True(字符串中既可以包含数字也可以包含字母)
print(name.isalpha())  # False(字符串中只包含字母)
print(name.isidentifier())  # True
print(name.islower())  # True(字符串是否是纯小写)
print(name.isupper())  # False(字符串是否是纯大写)
print(name.isspace())  # False(字符串是否全是空格)
print(name.istitle())  # False(字符串中的单词首字母是否都是大写)

列表(list)

   1、类型转换

# 列表
num = '111, 222, 333'
print(type(num))    # <class 'str'>
num = list(num)
print(type(num))    # <class 'list'>
# 字典
num = {'k1': 111, 'k2': 222, 'k3': 333}
print(type(num))  # <class 'dict'>
num = list(num)
print(type(num))  # <class 'list'>
# 元组
num = (111, 222, 333)
print(type(num))  # <class 'tuple'>
num = list(num)
print(type(num))  # <class 'list'>
# 集合
num = {111, 222, 333}
print(type(num))  # <class 'set'>
num = list(num)
print(type(num))  # <class 'list'>

```list关键字可以将支付for循环的数据类型转换成列表```

  2、使用

    2.1、优先掌握的操作

# 1.按索引存取值(正向存取+反向存取):即可存也可以取
# 1.1 正向取(从左往右)
l = [111, 222, 333, 444, 555]
print(l[2])  # 333
# 1.2 反向取(负号表示从右往左)
print(l[-1])  # 555
# 1.3 对于list来说,既可以按照索引取值,又可以按照索引修改指定位置的值,但如果索引不存在则报错
l[0] = 666
print(l)  # [666, 222, 333, 444, 555]

# 2.切片(顾头不顾尾,步长)
# 2.1 顾头不顾尾:取出索引为0到3的元素
print(l[0:4])  # [111, 222, 333, 444]
# 2.2 步长:0:4:2,第三个参数2代表步长,会从0开始,每次累加一个2即可,所以会取出索引0、2的元素
print(l[0:4:2])  # [111, 333]

# 3.长度
print(len(l))  # 5

# 4.成员运算in和not in
print(222 in l)  # True
print(777 not in l)  # True

# 5.添加
# 5.1 append()列表尾部追加元素
print(l.append(666))  # None
print(l)  # [111, 222, 333, 444, 555, 666]
# 5.2 append()一次性在列表尾部添加多个元素
print(l.append([777, 888, 999]))  # None
print(l)  # [111, 222, 333, 444, 555, [777, 888, 999]]
# 5.3 insert()在指定位置插入元素
print(l.insert(0, 999))  # None
print(l)  # [999, 111, 222, 333, 444, 555]
# 5.4 extend()一次性在列表尾部添加多个元素(相当于for循环+append操作)
print(l.extend([666, 777, 888]))  # None
print(l)  # [111, 222, 333, 444, 555, 666, 777, 888]

# 6.删除
# 6.1 del
print(l[0])  # 111 # 删除索引为0的元素
print(l)  # [111, 222, 333, 444, 555]
# 6.2 pop()默认删除列表最后一个元素,并将删除的值返回,括号内可以通过加索引值来指定删除元素
print(l.pop())  # 555
print(l)  # [111, 222, 333, 444]
# 6.3 remove()括号内指名道姓表示要删除哪个元素,没有返回值
print(l.remove(111))  # None
print(l)  # [222, 333, 444, 555

    2.2、列表的其他操作

# 1、reverse()
# 颠倒列表内元素顺序
l = [11, 22, 33, 44]
l.reverse()
print(l)  # [44, 33, 22, 11]

# 2.sort()给列表内所有元素排序
# 排序时列表元素之间必须是相同数据类型,不可混搭,否则报错
l = [11, 22, 3, 42, 7, 55]
l.sort()
print(l)  # [3, 7, 11, 22, 42, 55] 默认从小到大排序

l = [11, 22, 3, 42, 7, 55]
print(l.sort(reverse=True))  # None reverse用来指定是否颠倒排序,默认为False
print(l)  # [55, 42, 22, 11, 7, 3]

# 3、我们常用的数字类型直接比较大小,但其实,字符串、列表等都可以比较大小,原理相同:都是依次比较对应位置的元素的大小,如果分出大小,则无需比较下一个元素,比如
l1 = [1, 2, 3]
l2 = [2, ]
print(l2 > l1)  # True
# 字符之间的大小取决于它们在ASCII表中的先后顺序,越往后越大
s1 = 'hello'
s2 = 'ab'
print(s2 > s1)  # False 'h' > 'a'
# 所以我们也可以对下面这个列表排序
l = ['A', 'z', 'adjk', 'hello', 'hea']
l.sort()
print(l)  # ['A', 'adjk', 'hea', 'hello', 'z']

# 4、循环
# 循环遍历my_friends列表里面的值
l1 = [111, 222, 333, 444, 555]
for line in l1:
    print(line)
'''
111
222
333
444
555
'''

字典(dict)

   1、类型转换

# 转换1:
res = dict([['name', 'tony'], ('age', 18)])
print(res)  # {'name': 'tony', 'age': 18}

# 转换2:fromkeys会从元组中取出每个值当做key,然后与None组成key:value放到字典中
msg = {}.fromkeys(('name', 'age', 'sex'), [])
print(msg)  # {'name': [], 'age': [], 'sex': []}

  2、使用

    2.1、优先掌握的操作

# 1、按key存取值:可存可取
# 1.1 取
dic = {
    'name': 'tony',
    'age': 18,
    'hobbies': ['play game', 'read']
    }
print(dic['name'])  # tony
print(dic['hobbies'][1])  # read
# 1.2 对于赋值操作,如果key原先不存在于字典,则会新增key:value
dic['num'] = 123
print(dic)  # {'name': 'tony', 'age': 18, 'hobbies': ['play game', 'read'], 'num': 123}
# 1.3 对于赋值操作,如果key原先存在于字典,则会修改对应value的值
dic['name'] = 'tom'
print(dic)  # {'name': 'tom', 'age': 18, 'hobbies': ['play game', 'read'], 'num': 123}

# 2、长度len
print(len(dic))  # 3

# 3、成员运算in和not in
print('name' in dic)  # True 判断某个值是否是字典的key

# 4、删除
dic.pop('name')  # 通过指定字典的key来删除字典的键值对
print(dic)  # {'age': 18, 'hobbies': ['play game', 'read']}

# 5、键keys(),值values(),键值对items() 在python2中是列表 在python3中是迭代器
dic = {'age': 18, 'hobbies': ['play game', 'read'], 'name': 'zys'}
# # 获取字典所有的key  获取字典所有的键 看成列表即可
print(dic.keys())  # dict_keys(['age', 'hobbies', 'name'])
# # 获取字典所有的value 获取字典所有的值 看成列表即可
print(dic.values())  # dict_values([18, ['play game', 'read'], 'zys'])
# # 获取字典所有的键值对  获取字典里面所有的键值对 组织成列表套元组的形式 元组内有两个元素 第一个是k第二个是v
print(dic.items())  # dict_items([('age', 18), ('hobbies', ['play game', 'read']), ('name', 'zys')])


# 6、循环
# 6.1 默认遍历的是字典的key
for key in dic:
    print(key)
'''
age
hobbies
name
'''
# 6.2 只遍历key
for key in dic.keys():
    print(key)
'''
age
hobbies
name
'''
# 6.3 只遍历value
for key in dic.values():
    print(key)
'''
18
['play game', 'read']
zys
'''
# 6.4 遍历key与value
for key in dic.items():
    print(key)
'''
('age', 18)
('hobbies', ['play game', 'read'])
('name', 'zys')
'''

   2.2、需要掌握的操作

    get(

dic = {'k1': 'tony', 'k2': 'Tony', 'k3': 'JY'}
print(dic.get('k1'))  # tony  key存在,则获取key对应的value值
res = dic.get('xxx')
print(res)  # # None key不存在,不会报错而是默认返回None

res = dic.get('xxx', 666)  # key不存在时,可以设置默认返回的值
print(res)  # 666  key不存在时,可以设置默认返回的值
# ps:字典取值建议使用get方法

  pop()

dic = {'k1': 'tom', 'k2': 'Tony', 'k3': 'JY'}
v = dic.pop('k2')  # 删除指定的key对应的键值对,并返回值
print(dic)  # {'k1': 'tom', 'k3': 'JY'}
print(v)  # Tony

  popitem()

dic = {'k1': 'tom', 'k2': 'Tony', 'k3': 'JY'}
item = dic.popitem()  # 随机删除一组键值对,并将删除的键值放到元组内返回
print(dic)  # {'k1': 'tom', 'k2': 'Tony'}
print(item)  # ('k3', 'JY')

  update()

# 用新字典更新旧字典,有则修改,无则添加
dic = {'k1': 'tom', 'k2': 'Tony', 'k3': 'JY'}
dic.update({'k1': 'JN', 'k4': 'js'})
print(dic)  # {'k1': 'JN', 'k2': 'Tony', 'k3': 'JY', 'k4': 'js'}

  fromkeys()

dic = dict.fromkeys(['k1', 'k2', 'k3'], [])
print(dic)  # {'k1': [], 'k2': [], 'k3': []}
初始化字典

  setdefault()

dic = dict.fromkeys(['k1', 'k2', 'k3'], [])
print(dic)  # {'k1': [], 'k2': [], 'k3': []}
# # key不存在则新增键值对,并将新增的value返回
dic = {'k1': 111, 'k2': 222}
res = dic.setdefault('k3', 333)
print(res)  # 333
print(dic)  # {'k1': 111, 'k2': 222, 'k3': 333} 字典中新增了键值对

# key存在则不做任何修改,并返回已存在key对应的value值
dic = {'k1': 111, 'k2': 222}
res = dic.setdefault('k1', 666)
print(res)  # 111
print(dic)  # {'k1': 111, 'k2': 222}字典不变

   习题

res = dict.fromkeys(['k1', 'k2', 'k3'], [])
res['k1'].append(111)
res['k2'].append(222)
res['k3'].append(333)
print(res)  # {'k1': [111, 222, 333], 'k2': [111, 222, 333], 'k3': [111, 222, 333]}
res['k1'] = [111, 222, 333]
print(res)  # {'k1': [111, 222, 333], 'k2': [], 'k3': []}
res['k1'].append(444)
print(res)  # {'k1': [111, 222, 333, 444], 'k2': [], 'k3': []}
dic = {'age': 18, 'name': 'tony'}
print(dic.setdefault('name','tony123'))  # tony
# 当键存在的情况下 不修改而是获取该键对应的值
print(dic)  # {'age': 18, 'name': 'tony'}
# 当键不存在的情况下 新增一组键值对 并且该方法的结果是新增的值
print(dic.setdefault('pwd', '123'))  # 123
print(dic)  # {'age': 18, 'name': 'tony', 'pwd': '123'}

元组(tuple)

  1、类型转换

# 但凡能被for循环的遍历的数据类型都可以传给tuple()转换成元组类型
print(tuple('hello'))  # ('h', 'e', 'l', 'l', 'o')
print(tuple([1, 2, 3]))  # (1, 2, 3)
print(tuple({"name": "tony", "age": 18}))  # ('name', 'age')
print(tuple((1, 2, 3)))  # (1, 2, 3)
print(tuple({1, 2, 3, 4}))  # (1, 2, 3, 4)
# tuple()会跟for循环一样遍历出数据类型中包含的每一个元素然后放到元组中

  2、使用

tuple1 = (1, 'tony', 18.0, 11, 22, 33)
# # 1、按索引取值(正向取+反向取):只能取,不能改否则报错!
# print(tuple1[0])  # 1
# print(tuple1[-2])  # 22
# print(tuple1[0]) = 'tony'  # 报错:TypeError:

# 2、切片(顾头不顾尾,步长)
# print(tuple1[0:6:2])  # (1, 18.0, 22)

# 3、长度
# print(len(tuple1))  # 6

# 4、成员运算 in 和 not in
# print('tony' in tuple1)  # True
# print('tony' not in tuple1)  # False

# 5、循环
for line in tuple1:
     print(line)
'''
1
tony
18.0
# 11
# 22
# 33
'''

  3、习题

# 1、
# t1 = (111)  # 整型
# t2 = (11.11)  # 浮点型
# t3 = ('hello')  # 字符串
'''元组哪怕内部只有一个元素 也需要加上逗号'''
print(type((111,)))  # <class 'tuple'>
'''容器类型:内部可以存放多个值的数据类型都可以称之为容器类型
    建议:所有的容器类型在存储数据的时候 如果内部只有一个元素 
        那么也推荐你加上逗号'''
# 2、
t1 = (111, 222, [11, 22, 33])
t1[2].append(44)
print(t1)  # (111, 222, [11, 22, 33, 44])

集合(set)

  1、类型转换

# 但凡能被for循环的遍历的数据类型(强调:遍历出的每一个值都必须为不可变类型)都可以传给set()转换成集合类型
s = set([1, 2, 3, 4])
print(s)  # {1, 2, 3, 4}
s1 = set((11, 22, 33, 44))
print(s1)  # {33, 11, 44, 22}
s2 = set({'name': 'tony', })
print(s2)  # {'name'}
s3 = set('tony')
print(s3)  # {'y', 'n', 'o', 't'}

  2、使用

    2.1、去重

# 1. 只能针对不可变类型
# 2. 集合本身是无序的,去重之后无法保留原来的顺序
# s1 = {1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5}
# print(s1)  # {1, 2, 3, 4, 5}
name_list = ['kevin', 'tony', 'tony', 'tony', 'kevin', 'kevin']
# 1.先将列表转换成集合
s1 = set(name_list)
# 2.再将去重之后的集合转换成列表
l1 = list(s1)
print(l1)  # ['kevin', 'tony']
"""练习"""
ll = [33, 22, 11, 22, 11, 44, 33, 22, 55, 66, 77, 77, 66, 55, 44]
# 基本要求:去重即可
s1 = set(ll)
ll1 = list(s1)
print(ll1)

# 拔高要求:去重并保留原来的顺序
# 1.先定义一个新列表
new_list = []
# # 2.for循环ll列表
for i in ll:
    # 3.判断当前元素是否在新列表中
    if i not in new_list:
        # 3.1 如果不在 则添加到新列表
        new_list.append(i)
    # 3.2 如果在 则不管
print(new_list)

    2.2、关系运算

friends1 = {"zero", "kevin", "tony", "tom"}  # 用户1的好友们
friends2 = {"Jy", "ricky", "tony", "tom"}  # 用户2的好友们
# 1.求两个用户的共同好友
print(friends1 & friends2)  # {'tom', 'tony'}
# 2.求两个用户所有的好友
print(friends1 | friends2)  # {'zero', 'Jy', 'tom', 'tony', 'ricky', 'kevin'}
# 3.求用户1独有的好友
print(friends1 - friends2)  # {'zero', 'kevin'}
# 4.求用户2独有的好友
print(friends2 - friends1)  # {'ricky', 'Jy'}
# 5.求用户1和用户2各自的好友
print(friends1 ^ friends2)  # {'ricky', 'kevin', 'zero', 'Jy'}
# 6.父集与子集
s1 = {11, 22, 33, }
s2 = {11, 33}
print(s1 > s2)  # 判断s1是否是s2的父集   True
print(s2 < s1)  # 判断s2是否是s1的子集   True

    2.3、其他操作

# 1.长度
s = {'a', 'b', 'c'}
print(len(s))  # 3

# 2.成员运算
print('c' in s)  # True

# 3.循环
for item in s:
    print(item)
'''
b
c
a
'''

 可变与不可变类型

  可变数据类型:值发生改变时,内存地址不变,即id不变,证明在改变原值

  不可变类型:值发生改变时,内存地址也发生改变,即id也变,证明是没有在改变原值,是产生了新的值

  整型(不可变类型)

x = 18
print(id(x))  # 1772646400
x = 19
print(id(x))  # 1772646432
# 值发生改变,内存地址也改变,说明整型是不可变类型

  浮点型(不可变类型)

x = 18.1
print(id(x))  # 1749208338792
x = 19.1
print(id(x))  # 1749208338816
# 值发生改变,内存地址也改变,说明浮点型是不可变类型

  字符串(不可变类型)

name = 'tony'
print(id(name))  # 1835067818592
name = 'tom'
print(id(name))  # 1835067818760
# 值发生改变,内存地址也改变,说明字符串是不可变类型

  列表(可变类型)

num = [111, 222, 333]
print(id(num))  # 2301638293384
num[0] = 555
print(id(num))  # 2301638293384
print(num.append(666))  # None
print(id(num))  # 2301638293384
# 值发生改变,内存地址没变。说明列表是可变类型

  字典(可变类型)

d = {'k': 111, 'k1': 222, 'k3': 333}
print(id(d))  # 1914058780392
d['k'] = 555  # 1914058780392
print(id(d))
# 值发生变化,内存地址没变。说明字典事可变类型

 

posted @ 2021-11-05 15:57  那就凑个整吧  阅读(93)  评论(0编辑  收藏  举报