1、数据类型的补充

  1、1 元组

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

  1. tu1 = ('laonanhai')
  2. tu2 = ('laonanhai')
  3. print(tu1, type(tu1))
  4. print(tu2, type(tu2),)

  1. tu1 = (1)
  2. tu2 = (1,)
  3. print(tu1, type(tu1))
  4. print(tu2, type(tu2))

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

  1、2 list 列表

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

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

    方法一:

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

    方法二(错误展示):

  1. l1 = [111, 222, 333, 444, 555, ]
  2. for index in range(len(l1)):
  3. print('删除之前的index:%s' % index)
  4. print('删除之前的l1:%s' % l1)
  5. if index % 2 == 1:
  6. del l1[index]
  7. print('删除之后的index:%s' % index)
  8. print('删除之后的l1:%s' % l1)
  9. print(l1)

    方法三(倒着删):

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

    方法四(自己做的):

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

  1、3 字典

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

  1. dic = dict.fromkeys('abc', 666)
  2. print(dic)

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

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

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

    错误示例:

  1. dic = {'k1': 'v1', 'k2': 'v2', 'k3': 'v3', 'name': 'alex'}
  2. for i in dic:
  3. if 'k' in i:
  4. del dic[i]
  5. print(dic)

  1. dic = {'k1': 'v1', 'k2': 'v2', 'k3': 'v3', 'name': 'alex'}
  2. l1 = []
  3. for key in dic:
  4. if 'k' in key:
  5. l1.append(key)
  6. print(l1)
  7. for key in l1:
  8. del dic[key]
  9. print(dic)

  1、4 数据类型的转换

    str ------> list:

      split

    list ----->str:

      join

    tuple ------> list:

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

    list ------> tuple:

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

    dic ------> list:

      list(dic)  列表中只有key。

  1. dic = {'k1': 'v1', 'k2': 'v2','k3': 'v3',}
  2. l1 = list(dic)
  3. print(l1)
  4. print(list(dic.keys()))
  5. print(list(dic.values()))
  6. print(list(dic.items()))

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

  1. print(bool(0))
  2. print(bool(''))
  3. print(bool(()))
  4. print(bool([]))
  5. print(bool({}))

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

2、set  集合

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

  2、1 去重

    集合去重。

  1. set2 = {11, 11, 11, 22}
  2. print(set2)

    列表的去重。

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

  2、2 增

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

  1. set1 = {'alex', 'WuSir', 'RiTiAn', 'egon', 'barry'}
  2. set1.add('太白')
  3. print(set1)

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

  1. set1 = {'alex', 'WuSir', 'RiTiAn', 'egon', 'barry'}
  2. set1.update('abc')
  3. print(set1)

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

  2、3 删

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

  1. set1 = {'alex', 'WuSir', 'RiTiAn', 'egon', 'barry'}
  2. set1.remove('RiTiAn')
  3. print(set1)

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

  1. set1 = {'alex', 'WuSir', 'RiTiAn', 'egon', 'barry'}
  2. print(set1.pop())
  3. print(set1)

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

  1. set1 = {'alex', 'WuSir', 'RiTiAn', 'egon', 'barry'}
  2. set1.clear()
  3. print(set1)

   del __  删除集合。

  1. set1 = {'alex', 'WuSir', 'RiTiAn', 'egon', 'barry'}
  2. del set1
  3. print(set1)

  2、4 查

    for循环。

  1. set1 = {'alex', 'WuSir', 'RiTiAn', 'egon', 'barry'}
  2. for i in set1:
  3. print(i)

  2、5 交集

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

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

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

  2、6 并集

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

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

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

  2、7 差集

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

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

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

  2、8 反交集

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

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

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

  2、9 子集

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

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

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

  2、10 超集

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

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

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

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

3、深浅copy

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

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

  3、1 浅copy

    copy.()  浅copy

  1. l1 = [11, 22, 33]
  2. l2 = l1.copy()
  3. l1.append(666)
  4. print(l1, id(l1))
  5. print(l2, id(l2))

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

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

  1. l1 = [11, 22, ['barry', [55, 66]], [11, 22]]
  2. l2 = l1.copy()
  3. l1[2].append('alex')
  4. print(l1, id(l1))
  5. print(l2, id(l2))
  6. print(l1, id(l1[-1]))
  7. print(l2, id(l2[-1]))

  3、2 深copy

    import copy

  1. import copy
  2. l1 = [11, 22, 33]
  3. l2 = copy.deepcopy(l1)
  4. l1.append(666)
  5. print(l1, id(l1))
  6. print(l2, id(l2))

  1. import copy
  2. l1 = [11, 22, ['barry']]
  3. l2 = copy.deepcopy(l1)
  4. l1[2].append('alex')
  5. print(l1, id(l1[-1]))
  6. print(l2, id(l2[-1]))

    深copy  完全独立。

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

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

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

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

Python_数据类型的补充、集合set、深浅copy的更多相关文章

  1. python基础之数据类型操作补充,集合及其操作,深浅拷贝

    内容概要: 数据类型操作补充 集合及其操作 深浅拷贝1.基础数据类型补充 1.1字符串的操作补充li = ["李嘉诚", "麻花藤", "黄海峰&qu ...

  2. python之数据类型补充、集合、深浅copy

    一.内容回顾 代码块: 一个函数,一个模块,一个类,一个文件,交互模式下,每一行就是一个代码块. is == id id()查询对象的内存地址 == 比较的是两边的数值. is 比较的是两边的内存地址 ...

  3. python 的基础 学习 第八天数据类型的补充 ,集合和深浅copy

    1,数据类型的补充: 元组()tuple,如果只有元素,并且没有逗号,此元素是什么数据类型,该表达式就是什么数据类型. tu = ('rwr') print(tu,type(tu)) tu = ('r ...

  4. 基础数据类型之集合和深浅copy,还有一些数据类型补充

    集合 集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的.以下是集合最重要的两点: 去重,把一个列表变成集合,就自动去重了. 关系 ...

  5. day 07 数据类型,集合,深浅copy

    1.day 06 内容回顾 小数据池 int :-5-256 str:特殊字符 ,*20 ascii:8位 1字节 表示一个字符 unicode:32位 4个字节 , 表示一个字符 字节表示8位表示一 ...

  6. python-基础数据类型,集合及深浅copy

    一 数据类型定义及分类 我们人类可以很容易的分清数字与字符的区别,但是计算机并不能呀,计算机虽然很强大,但从某种角度上看又很傻,除非你明确的告诉它,1是数字,“汉”是文字,否则它是分不清1和‘汉’的区 ...

  7. 基础数据类型的坑和集合及深浅copy

    一.基础数据类型的坑: 元组: 如果一个元组中,只有一个元素,且没有逗号,则该"元组"与里面的数据的类型相同. # 只有一个数据,且没有逗号的情况: print(tu1,type( ...

  8. 07、python的基础-->数据类型、集合、深浅copy

    一.数据类型 1.列表 lis = [11, 22, 33, 44, 55] for i in range(len(lis)): print(i) # i = 0 i = 1 i = 2 del li ...

  9. 数据结构中的列表、元组、字典、集合 ,深浅copy

    数据结构:数据结构是计算机存储数据和组织数据的方式.数据结构是指相互之间存在一种或多种特定关系的数据元素的集合.在python中主要的数据类型统称为容器. 而序列(如列表.元组).映射(如字典).集合 ...

随机推荐

  1. Zabbix Agent安装与卸载

    cmd /c "C:\zabbix\bin\win64\zabbix_agentd.exe -c c:\zabbix\conf\zabbix_agentd.win.conf -i" ...

  2. nodejs websocket

    <script src="https://cdn.socket.io/socket.io-1.4.5.js"></script> <script ty ...

  3. flask基础入门

    Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后 ...

  4. js按照特定的中文字进行排序的方法

    之前遇到过按照中文字符排序的需求很顺利的解决了,这次是按照特定的中文字进行排序,比如按照保守型,稳健型,平衡型,成长型,进取型进行排序. 可以使用localeCompare() 方法来实现中文按照拼音 ...

  5. P2708 硬币翻转(简单模拟)

    题意:弱鸡,其实题意是1到i都变化.然后把所有的硬币都变到正面. 简单的模拟: 思路:本质就是记录相邻字符的有几组不同,比如11010,则就有3组不同,但是,这样变化出来的字符串是00000,所以需要 ...

  6. 【css】css规范

    说法一: 属性的书写顺序, 举个例子: .hotel-content { /* 定位 */ display: block; position: absolute; left: 0; top: 0; / ...

  7. @ConfigurationProperties 配置详解

    文章转自 https://blog.csdn.net/qq_26000415/article/details/78942494 前言新的一年到了,在这里先祝大家新年快乐.我们在上一篇spring bo ...

  8. node.js使用express框架进行文件上传

    关于node.js使用express框架进行文件上传,主要来自于最近对Settings-Sync插件做的研究.目前的研究算是取得的比较好的进展.Settings-Sync中通过快捷键上传文件,其实主要 ...

  9. 初学Python——装饰器

    一.什么是装饰器 当我们做好一个产品之后,需要对它进行不断地维护,对某些函数增加一些功能.这个时候如果去修改源代码将是非常不合适的.(原因:1.原则上已经写好的函数尽量不去修改它,因为一旦修改可能会导 ...

  10. Java读写文件,字符输入流FileReader 和 字符输出流FileWriter

    一个流被定义为一个数据序列.输入流用于从源文件读取数据,输出流用于向目标写数据. 字符输入流FileReader三种读文件方式 package com.shuzf.fileio; import jav ...