python学习第六天 数据类型(集合,内存相关)

day06 数据类型

今日内容

  • 集合
  • 内存相关 注意是重新fuzhi还是内部修改
  • 深浅拷贝

内容补充

  1. 列表功能

    • reverse 反转

      v1 = [1,2,2,4,4,4,5,5]
      v1.reverse()
      print(v1)
      
    • sort() 可以根据数字大小排序😂

      v1 = [11,22,3111,32,13]
      print(v1)
      # v1.sort(reverse=False) # 从小到大(默认) 
      # v1.sort(reverse=True) # 从大到小
      # print(v1)
      
  2. 字典

    • keys/values/items

    • .get

    info = {}
    info.get(k1,111)
    
    • pop
    info = {'k1':'v1','k2':'v2'}
    result = info.pop('k2')
    print(info,result)
    del info['k1']
    
    • update
    info = {'k1':'v1','k2':'v2'}
    # 不存在,则添加/存在,则更新 info.update({'k3':'v3','k4':'v4','k2':666}) print(info)
    
    • 判断一个字符传中是否有敏感字符

      • str 字符串

        v = "Python全栈21期"
        if "全栈" in v: print('含敏感字符')
        
      • list/tuple 列表/元祖

        v = ['alex','oldboy','张三','李四']
        if "张三" in v: print('含敏感')
        
      • dict 字典

        v = {'k1':'v1','k2':'v2','k3':'v3'}
        # 默认按照键判断,即:判断x是否是字典的键。 
        if 'x' in v:
        	pass
        # 请判断:k1 是否在其中? 
        if 'k1' in v:
        	pass
        # 请判断:v2 是否在其中? 
        # 方式一:循环判断
        flag = '不存在'
        for v in v.values():
        	if v == 'v2': 
        		flag = '存在'
        print(flag)
        # 方式二:
        if 'v2' in list(v.values()): 
        # 强制转换成列表 ['v1','v2','v3']
        	pass
        # 请判断:k2:v2 是否在其中? 
        value = v.get('k2')
        if value == 'v2':
        	print('存在') 
        else:
        	print('不存在')
        
      • 练习题

        # 让用户输入任意字符串,然后判断此字符串是否包含指定的敏感字符。 
        char_list = ['张三','李四','刘五']
        content = input('请输入内容:') # 我叫张三 / 我是李四 / 我要刘五
        success = True
        for v in char_list:
            if v in content:
                success = False
                break
        if success:
            print(content)
        else: print('包含铭感字符')
        # 示例:
        # 1. 昨天课上最后一题
        # 2. 判断 ‘v2’ 是否在字典的value中 v = {'k1':'v1','k2':'v2','k3':'v3'} 【循环判断】 # 3. 敏感字
        

内容详细

1.集合 set

  • 无序
  • 无重复
v = {1,2,3,4,5,6,99,100}
# 疑问:v = {} """
None
int
		v1 = 123
		v1 = int() --> 0
bool
    v2 = True/False
    v2 = bool() -> False
str
		v3 = ""
    v3 = str()
list
		v4 = []
    v4 = list()
tuple
		v5 = ()
    v5 = tuple()
dict
		v6 = {}
    v6 = dict()
set
v7 = set() """


空字符串写法
  1. 集合独有功能

    • add 添加,不会生成新的变量
    • discard 删除,不会生成新的变量
    • update 更新,不会生成新的变量
    • intersection 交集
    • union 并集
    • difference 差集
  2. 公共功能

    • len

      v = {1,2,'李邵奇'} 
      print(len(v))
      
    • for循环

      v = {1,2,'李邵奇'} 
      for item in v:
      	print(item)
      
    • 索引-无

    • 不长-无

    • 切片-无

    • 删除-无

    • 修改-无

  3. 嵌套问题

    # 1. 列表/字典/集合 -> 不能放在集合中+不能作为字典的key(unhashable) # info = {1, 2, 3, 4, True, "国风", None, (1, 2, 3)}
    # print(info)
    
    # 2. hash -> 哈希是怎么回事?
    # 因为在内部会将值进行哈希算法并得到一个数值(对应内存地址),以后用于快速查找。
    
    # 3. 特殊情况
    # info = {0, 2, 3, 4, False, "国风", None, (1, 2, 3)} 
    # print(info)
    # info = {
    # 1:'alex',
    # True:'oldboy' #}
    # print(info)
    

2.内存相关

  • 示例一

    v1 = [11,22,33]
    v2 = [11,22,33]
    
    v1 = 666
    v2 = 666
    
    v1 = "asdf"
    v2 = "asdf"
    
    # 按理 v1 和 v2 应该是不同的内存地址。特殊:
    1. 整型: -5 ~ 256
    2. 字符串:"alex",'asfasd asdf asdf d_asdf '
    ----"f_*" * 3 - 重新开辟内存。
    

  • 示例二

    v1 = [11,22,33,44]
    v1 = [11,22,33]
    
  • 示例三

    v1 = [11,22,33]
    v2 = v1
    
    # 练习1 (内部修改) 
    v1 = [11,22,33] 
    v2 = v1 v1.append(666) 
    print(v2) # 含 666
    # 练习2:(赋值) 
    v1 = [11,22,33] 
    v2 = v1
    v1 = [1,2,3,4] 
    print(v2)
    # 练习3:(重新赋值) 
    v1 = 'alex'
    v2 = v1
    v1 = 'oldboy' print(v2)
    
  • 示例四

    v = [1,2,3]
    values = [11,22,v]
    # 练习1:
    """
    v.append(9)
    print(values) # [11,22,[1,2,3,9]] """
    # 练习2:
    """
    values[2].append(999)
    print(v) # [1, 2, 3, 999]
    """
    # 练习3:
    """
    v = 999
    print(values) # [11, 22, [1, 2, 3]] """
    # 练习4:
    values[2] = 666
    print(v) # [1, 2, 3]
    
  • 示例五

    v1 = [1,2]
    v2 = [2,3]
    v3 = [11,22,v1,v2,v1]
    
  • 查看内存地址

    """
    v1 = [1,2,3]
    v2 = v1
    v1.append(999)
    print(v1,v2)
    print(id(v1),id(v2))
    """
    """
    v1 = [1,2,3]
    v2 = v1
    print(id(v1),id(v2))
    v1 = 999
    print(id(v1),id(v2))
    """
    
  • 问题:==跟is有什么区别

    • ==用于比较值是否相等
    • is用于比较内存地址是否相等

总结

  • 列表

    • reverse 反转
    • sort 根据数字大小排序
  • 字典

    • get 取值判断是否存在
    • pop 删除
    • update 不存在,则添加/存在,则更新
  • 集合

    • add 添加,不会生成新的变量

    • discard 删除,不会生成新的变量

    • update 更新,不会生成新的变量

    • intersection 交集(*)

    • union 并集

    • difference 差集

  • 特殊:

    • 嵌套:集合/字典的key
    • 空:None
    • 空集合 set()
  • id 查看内存地址

  • type 查看是什么数据类型

  • 嵌套的应用:(*)

    • 赋值
    • 修改内部元素:列表,字典,集合
  • python数据的小数据池

    • -5~~256
    • 字符串:"alex",'asfasd asdf asdf d_asdf '
      ----"f_*" * 3 - 重新开辟内存。
  • None数据类型,改类型表示空(无任何功能,专门用于提供空值)

  • 字典补充

#!/usr/bin/env python
# -*- coding:utf-8 -*-

# 索引不存在,报错
# v = ['alex','oldboy']
# print(v[123])

# ################ get
"""
info = {'k1':'v1','k2':'v2'}

# v1 = info['k11111']
# v2 = info.get('k1111') # None就是Python中的空
# v3 = info.get('k1111',666)
# print(v2)

result = info.get('k1111')
if result == None:
    print('不存在')

if result:
    print('存在')
else:
    print('不存再')
"""

# ################ get
# info = {'k1':'v1','k2':'v2'}
# result = info.pop('k2')
# print(info,result)
#
# del info['k1']

# ################ update
info = {'k1':'v1','k2':'v2'}

# 不存在,则添加/存在,则更新
info.update({'k3':'v3','k4':'v4','k2':666})
print(info)

  • 集合
#!/usr/bin/env python
# -*- coding:utf-8 -*-
""""""
# 1. 空集合

# v = {} # 空字典
# v1 = set()
# print(type(v1))
"""
None
int
    v1 = 123
    v1 = int() --> 0
bool
    v2 = True/False
    v2 = bool() -> False
str
    v3 = ""
    v3 = str()
list
    v4 = []
    v4 = list()
tuple
    v5 = ()
    v5 = tuple()
dict
    v6 = {}
    v6 = dict()
set
    v7 = set()

"""

# 2. 独有功能

# 2.1 add添加
# v = {1,2}
# v.add('Lishaoqi')
# v.add('Lishaoqi')
# print(v)

# 2.2 删除
# v = {1,2,'李邵奇'}
# v.discard('李邵奇')
# print(v)

# 2.3 批量添加
# v = {1,2,'李邵奇'}
# v.update({11,22,33})
# print(v)

# 2.4. 交集
# v = {1,2,'李邵奇'}
# result = v.intersection({1,'李邵奇','小黑'})
# print(result)

# 2.4 并集
# v = {1,2,'李邵奇'}
# result = v.union({1,'李邵奇','小黑'})
# print(result)

# 2.5 差集
# v = {1,2,'李邵奇'}
# result = v.difference({1,'李邵奇','小黑'}) # v中有且{1,'李邵奇','小黑'}没有
# print(result)
#
# v1 = {1,'李邵奇','小黑'}
# result1 = v1.difference({1,2,'李邵奇'})
# print(result1)

# 2.6 对称差集
# v = {1,2,'李邵奇'}
# result = v.symmetric_difference({1,'李邵奇','小黑'})
# print(result)

# 注意:
# v = {1,2,'李邵奇'}
# result = v.intersection([1,'李邵奇','小黑'])
# print(result)

# ##################################################
# 3.1 len
# v = {1,2,'李邵奇'}
# print(len(v))

# 3.2 循环
# v = {1,2,'李邵奇'}
# for item in v:
#     print(item)


# ##################################################
# 1. 列表/字典/集合 -> 不能放在集合中+不能作为字典的key(unhashable)
# # info = {1, 2, 3, 4, True, "国风", None, (1, 2, 3)}
# # print(info)
# # 2. hash -> 哈希是怎么回事?
# # 因为在内部会将值进行哈希算法并得到一个数值(对应内存地址),以后用于快速查找。
#
# # 3. 特殊情况
# # info = {0, 2, 3, 4, False, "国风", None, (1, 2, 3)}
# # print(info)
#
# # info = {
# #     1:'alex',
# #     True:'oldboy'
# # }
# # print(info)

"""
v1 = [1,2,3]
v2 = v1
v1.append(999)
print(v1,v2)
print(id(v1),id(v2))
"""

"""
v1 = [1,2,3]
v2 = v1
print(id(v1),id(v2))
v1 = 999
print(id(v1),id(v2))
"""
posted @ 2019-04-03 21:16  oldboylkk  阅读(74)  评论(0)    收藏  举报