Python全栈__数据类型的补充、集合set、深浅copy

1、数据类型的补充

  1、1 元组

    当元组里面只有一个元素且没有逗号时,则该数据的数据类型与括号里面的元素相同。

tu1 = (‘laonanhai‘)
tu2 = (‘laonanhai‘)
print(tu1, type(tu1))
print(tu2, type(tu2),)

tu1 = (1)
tu2 = (1,)
print(tu1, type(tu1))
print(tu2, type(tu2))

tu1 = ([1, 2, 3])
tu2 = ([1, 2, 3],)
print(tu1, type(tu1))
print(tu2, type(tu2))

  1、2 list 列表

    在循环一个列表时,最好不要改变列表的大小,会影响你的最终结果。

    li = [111, 222, 333, 444, 555,],索引为奇数的所有元素全部删除。

    方法一:

l1 = [111, 222, 333, 444, 555, ]
del l1[1::2]
print(l1)

    方法二(错误展示):

l1 = [111, 222, 333, 444, 555, ]
for index in range(len(l1)):
    print(‘删除之前的index:%s‘ % index)
    print(‘删除之前的l1:%s‘ % l1)
    if index % 2 == 1:
        del l1[index]
    print(‘删除之后的index:%s‘ % index)
    print(‘删除之后的l1:%s‘ % l1)
print(l1)

    方法三(倒着删):

l1 = [111, 222, 333, 444, 555, ]
for index in range(len(l1) - 1, -1, -1):
    if index % 2 == 1:
        del l1[index]
print(l1)

    方法四(自己做的):

l1 = [111, 222, 333, 444, 555, 666, 777, 888, 999, ]
i = len(l1)
count = 1
s = int(len(l1)/2)
for j in range(s):
    del l1[count]
    count += 1
print(l1)

  1、3 字典

    1、3、1 dict.fromkeys(A, B)  A为可迭代对象,B任意。创建一个字典,迭代A的最小元素为键,B为值。

dic = dict.fromkeys(‘abc‘, 666)
print(dic)

dic = dict.fromkeys([11, 22, 33], 666)
print(dic)

dic = dict.fromkeys([1, 2, 3], [])
dic[1].append(666)
print(dic)

    1、3、2 在循环字典时,最好不要改变字典的大小,会影响结果或者报错。

    错误示例:

dic = {‘k1‘: ‘v1‘, ‘k2‘: ‘v2‘, ‘k3‘: ‘v3‘, ‘name‘: ‘alex‘}
for i in dic:
    if ‘k‘ in i:
        del dic[i]
print(dic)

dic = {‘k1‘: ‘v1‘, ‘k2‘: ‘v2‘, ‘k3‘: ‘v3‘, ‘name‘: ‘alex‘}
l1 = []
for key in dic:
    if ‘k‘ in key:
        l1.append(key)
    print(l1)
for key in l1:
    del dic[key]
print(dic)

  1、4 数据类型的转换

    str ------> list:

      split

    list ----->str:

      join

    tuple ------> list:

tu1 = (1, 2, 3)
l1 = list(tu1)
print(l1)

    list ------> tuple:

tu1 = (1, 2, 3)
l1 = list(tu1)
tu2 = tuple(l1)
print(tu2)

    dic ------> list:

      list(dic)  列表中只有key。

dic = {‘k1‘: ‘v1‘, ‘k2‘: ‘v2‘,‘k3‘: ‘v3‘,}
l1 = list(dic)
print(l1)
print(list(dic.keys()))
print(list(dic.values()))
print(list(dic.items()))

    0, ‘‘,[], {},() ------> bool都是False。

print(bool(0))
print(bool(‘‘))
print(bool(()))
print(bool([]))
print(bool({}))

print(bool([0, 0, 0]))

2、set  集合

set1 = {1, 2, 3, ‘abc‘, (1, 2, 3), True, }
print(set1)

  2、1 去重

    集合去重。

set2 = {11, 11, 11, 22}
print(set2)

    列表的去重。

l1 = [11, 11, 22, 22, 33, 33, 33, 44]
l2 = list(set(l1))
l2.sort()
print(l2)

  2、2 增

    __.add(‘A‘)  A为添加的内容,随机添加。

set1 = {‘alex‘, ‘WuSir‘, ‘RiTiAn‘, ‘egon‘, ‘barry‘}
set1.add(‘太白‘)
print(set1)

    __.update(‘A‘)  A为添加的可迭代内容,将A拆分为最小单元然后迭代添加。

set1 = {‘alex‘, ‘WuSir‘, ‘RiTiAn‘, ‘egon‘, ‘barry‘}
set1.update(‘abc‘)
print(set1)

set1 = {‘alex‘, ‘WuSir‘, ‘RiTiAn‘, ‘egon‘, ‘barry‘}
set1.update([111, 2222, 333])
print(set1)

  2、3 删

    __.remove(‘A‘)  按元素删除。A为需要删除的内容。

set1 = {‘alex‘, ‘WuSir‘, ‘RiTiAn‘, ‘egon‘, ‘barry‘}
set1.remove(‘RiTiAn‘)
print(set1)

    __.pop()  随机删除,有返回值。

set1 = {‘alex‘, ‘WuSir‘, ‘RiTiAn‘, ‘egon‘, ‘barry‘}
print(set1.pop())
print(set1)

    __.clear()  清空集合。  空集合为set()。

set1 = {‘alex‘, ‘WuSir‘, ‘RiTiAn‘, ‘egon‘, ‘barry‘}
set1.clear()
print(set1)

   del __  删除集合。

set1 = {‘alex‘, ‘WuSir‘, ‘RiTiAn‘, ‘egon‘, ‘barry‘}
del set1
print(set1)

  2、4 查

    for循环。

set1 = {‘alex‘, ‘WuSir‘, ‘RiTiAn‘, ‘egon‘, ‘barry‘}
for i in set1:
    print(i)

  2、5 交集

    交集:__ & __ 或者 __.intersection(__)

set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7, 8}
set3 = set1 & set2
print(set3)

set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7, 8}
set3 = set1.intersection(set2)
print(set3)

  2、6 并集

    并集:__ | __    或者    __.union(__)

set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7, 8}
set3 = set1 | set2
print(set3)

set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7, 8}
set3 = set1.union(set2)
print(set3)

  2、7 差集

    差集:__ - __    或者    __.difference(__)

set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7, 8}
set3 = set1 - set2
print(set3)  # set1独有的

set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7, 8}
set3 = set1.difference(set2)  # set1独有的
print(set3)

  2、8 反交集

    反交集:__ ^ __    或者    __.symmetric_difference(__)

set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7, 8}
set3 = set1 ^ set2
print(set3)

set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7, 8}
set3 = set1.symmetric_difference(set2)
print(set3)

  2、9 子集

    子集:__ < __    或者    __.issubset(__)

set1 = {1, 2, 3}
set2 = {1, 2, 3, 4, 5, 6}
print(set1 < set2)  # True  set1 是set2 的子集

set1 = {1, 2, 3}
set2 = {1, 2, 3, 4, 5, 6}
print(set1.issubset(set2))  # True  set1是set2的子集

  2、10 超集

set1 = {1, 2, 3}
set2 = {1, 2, 3, 4, 5, 6}
print(set2 > set1)  # set2 是 set1 的超集

set1 = {1, 2, 3}
set2 = {1, 2, 3, 4, 5, 6}
print(set2.issuperset(set1))  # set2 是 set1 的超集

    frozenset()  frozenset是冻结的集合,它是不可变的,存在哈希值,好处是它可以作为字典的key,也可以作为其它集合的元素。缺点是一旦创建便不能更改,没有add,remove方法。  

set1 = frozenset({1, 2, 3, ‘alex‘})
print(set1)

3、深浅copy

    对于赋值运算来说,指向的都是同一个内存地址,一变都变。

l1 = [1, 2, 3]
l2 = l1
l3 = l2
l3.append(666)
print(l1, l2, l3)

  3、1 浅copy

    copy.()  浅copy

l1 = [11, 22, 33]
l2 = l1.copy()
l1.append(666)
print(l1, id(l1))
print(l2, id(l2))

    当列表内层列表增加元素时,浅copy跟随变化。内层的列表同样是同一个地址。

    对于浅copy来说,第一层创建的是新的内存地址,从第二层开始,指向的都是同一个内存地址,所以,对于第二层以及更深的层数来说,保持一致性。

l1 = [11, 22, [‘barry‘, [55, 66]], [11, 22]]
l2 = l1.copy()
l1[2].append(‘alex‘)
print(l1, id(l1))
print(l2, id(l2))
print(l1, id(l1[-1]))
print(l2, id(l2[-1]))

  3、2 深copy

    import copy

import copy
l1 = [11, 22, 33]
l2 = copy.deepcopy(l1)
l1.append(666)
print(l1, id(l1))
print(l2, id(l2))

import copy
l1 = [11, 22, [‘barry‘]]
l2 = copy.deepcopy(l1)
l1[2].append(‘alex‘)
print(l1, id(l1[-1]))
print(l2, id(l2[-1]))

    深copy  完全独立。

l1 = [1, 2, 3]
l2 = [1, 2, 3]
l1.append(666)
print(l1, id(l1))
print(l2, id(l2))

  对于切片来说,这是浅copy。

l1 = [1, 2, 3, 4, 5, 6, [11, 22]]
l2 = l1[:]
l1.append(666)
print(l1, l2)

l1 = [1, 2, 3, 4, 5, 6, [11, 22]]
l2 = l1[:]
l1[-1].append(666)
print(l1, l2)

原文地址:https://www.cnblogs.com/ZN-225/p/9587953.html

时间: 2024-10-28 21:02:31

Python全栈__数据类型的补充、集合set、深浅copy的相关文章

Python全栈__字典及其操作

1.字典 字典,基础数据类型之一,{}以键值对的形式存储数据. 以key : value 形式存储数据.例如,name 为 key,Laonanhai 为 value. dic = {'name': 'Laonanhai', 'age': 45, 'name_list': ['反面教材', '俊俊', ...] } Python中唯一的映射类型.用以存储大量的关系型数据. 数据类型的分类: 可变类: 可变(不可哈希hash):list.dict.set.例如list = [11, 222, 33

Python全栈--7.3--模块补充configparser--logging--subprocess--os.system--shutil

模块补充: 一.configparser用于处理特定格式的文件,其本质是利用open来操作文件 继承到2版本 configparser 实现了更多智能特征,更有壳预见性,新的应用更偏好这个版本, 处理  配置文件类似如下: # 注释1 ; 注释2 [section1] k1 = v1 # 值 k2 = v2 # 值 [section2] k1 = v1 # 值 [mysql] client_ip = 10.0.0.1 port = 4444 [mysqld] server_ip = 10.0.0

Python全栈__函数的有用信息、带参数的装饰器、多个装饰器装饰一个函数

1.函数的有用信息 代码1: 1 def login(username, password): 2 """ 3 此函数需要用户名,密码两个参数,完成的是登录的功能. 4 :return: True 登录成功. False登录失败. 5 """ 6 print(login.__name__) 7 print(login.__doc__) 8 print('登录成功...') 9 return True 10 11 print(login.__nam

Python全栈__字符串初识及操作

基础数据类型初识 1.int型 int:用于计算. 十进制转化成二进制的有效位数. 1 0000 0001 2 0000 0010 3 0000 0011 ... ... 100 ? 计算十进制转化成二进制的有效位数..bit_length() i = 100 print(i.bit_length()) 2.字符串str str: 'alex'.'1235443543'.'[1,2,3]'.可存放少量数据. 索引.切片.步长 索引编号: python12期 012345678 p 的正向索引编号

python全栈开发基础【补充】异常处理

一.错误与异常 程序中难免会出现错误,而错误分为两种 1.语法错误:(这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正) 2.逻辑错误:(逻辑错误),比如用户输入的不合适等一系列错误 那什么是异常呢? 异常就是程序运行时发生错误的信号,在python中,错误触发的异常如下.异常发生之后,异常之后的代码就不执行了 异常种类:在python中不同的异常可以用不同的类型(python中统一了类与类型,类型即类)去标识, 不同的类对象标识不同的异常,一个异常标识一种错误 常见的异

Python全栈__函数的初识、函数的返回值、函数的参数

1.函数的初识 def关键字 空格 函数名(与变量名命名规则相同):英文冒号 函数体 执行函数:函数名+() 函数是以功能为导向的. def login(): pass def register(): pass 1 def my_len(): 2 l1 = [1, 2, 3, 1, 6, 9, 10] 3 count = 0 4 for i in l1: 5 count += 1 6 my_len() 2.函数的返回值 return: 1.函数中遇到 return 结束函数,下面代码不执行. d

python全栈开发基础【补充】metaclass(元类)

一.创建类的执行流程 二.元类的认识 什么是元类呢?在Python3中继承type的就是元类 二.元类的示例 # 方式一 class MyType(type): '''继承type的就是元类''' def __init__(self,*args,**kwargs): print("MyType创建的对象",self) #Foo super(MyType,self).__init__(*args,**kwargs) def __call__(self, *args, **kwargs):

python全栈开发基础【补充】解决tcp粘包

一.什么是粘包 须知:只有TCP有粘包现象,UDP永远不会粘包 粘包不一定会发生 如果发生了:1.可能是在客户端已经粘了 2.客户端没有粘,可能是在服务端粘了 首先需要掌握一个socket收发消息的原理 应用程序所看到的数据是一个整体,或说是一个流(stream),一条消息有多少字节对应用程序是不可见的,因此TCP协议是面向流的协议,这也是容易出现粘包问题的原因.(因为TCP是流式协议,不知道啥时候开始,啥时候结束).而UDP是面向消息的协议,每个UDP段都是一条消息,应用程序必须以消息为单位提

Python全栈__服务器与多客户端通信、UDP协议、pycharm打印带颜色输出、时间同步的机制

1.服务器与多客户端通信 1 import socket 2 # 创建tcp socket的套接字 3 sk = socket.socket() 4 # bind 5 sk.bind(('127.0.0.1',8080)) 6 # 监听 7 sk.listen(5) 8 # 等待连接 9 while 1: 10 conn, addr = sk.accept() 11 while 1: 12 msg_s = input('>>>') 13 conn.send(msg_s.encode('u