1,补充基本数据类型的知识点:    "  " .join(内容)...........什么加到什么里边,内容可以是:int,str,dic,tup.

lst = ["周树人", "周星星", "马化腾", "周树人"]
lst1 = "周扒皮".join(lst)
print(lst1) # 周树人周扒皮周星星周扒皮马化腾周扒皮周树人
s = "abc"
s1 = s.join("")
print(s1) # 1abc2abc3
s2 = "".join(s)
print(s2) # a123b123c

小结:

  • " ".join(内容)" "就限制了必须是str,把列表变成字符串

2,列表,字典在遍历循环的时候不能进行删除,因为删除以后lst或者dic的索引位置就发生了改变.

# for循环的时候不能删除的示例:
li = [11, 22, 33, 44]
for el in li:
li.remove(el)
print(li)
  • 分析原因:     for的运行过程. 会有⼀一个指针来记录当前循环的元素是哪⼀一个, 一开始这个指针指向第0 个. 然后获取到第0个元素. 紧接着删除第0个. 这个时候. 原来是第⼀一个的元素会⾃自动的变成 第0个. 然后指针向后移动⼀一次, 指向1元素.  这时原来的1已经变成了了0, 也就不会被删除了

解决方案:

  • 通常采用的方法就是把li遍历出来,找到要删除的元素,记录在另一个list中,在根据新的list中的元素遍历出来再用list的删除操作即可
li = [11, 22, 33, 44]
lst = [] # 定义一个空的列表,用于存放要删除的元素
for el in li:
# 选择要删除的元素
if el == 22:
lst.append(el) # 把要删除的元素存放到要删除的列表中
# for循环要删除元素的列表,进行删除
for i in lst:
li.remove(i) # 就用remove指定元素删除
print(li) # [11, 33, 44]
  • 注意: 由于删除元素会导致元素的索引改变, 所以容易易出现问题. 尽量量不要再循环中直接去删 除元素. 可以把要删除的元素添加到另⼀一个集合中然后再批量量删除.

3,dict中的fromkey(),可以帮我们通过list创建一个dict

dic = dict.fromkeys(["jay", "jj"], ["周杰伦", "麻花藤"])
print(dic) # {'jay': ['周杰伦', '麻花藤'], 'jj': ['周杰伦', '麻花藤']}
  • 因此,dict.fromkeys().通过list来创建的dict,前边的list作为dict中的"key",第二个list作为dict中的"values".(list最多是2个列表,超过2个会报错)
dic = dict.fromkeys(["jay", "jj"], ["周杰伦", "麻花藤"])
dic.get("jay").append("容么么")
print(dic) # {'jay': ['周杰伦', '麻花藤', '容么么'], 'jj': ['周杰伦', '麻花藤', '容么么']}
  • 在这里,第二个list会作为第一个list中每一个元素的value,因此第二个list既是第一个list中第一个元素的value也是第二个元素的value,也是第三个元素的value.......,新dict中都是公用一个value值,因此改变dic其中一个"key"就会造成所有"keys"的"value"发生变化,且变化都是一样的.

4,数据的类型转换:转化成谁就用谁括起来

  • 类型转换:

    • 元组 => 列表        list(tuple)
    • 列表 => 元组        tuple(list)
    • list=>str                str.join(list)
    • str=>list                str.split() 
  • 转换成False的数据: 0,'',None,[],(),{},set() ==> False

5,集合(set):set是python中基本数据类型之一,set集合一般用{}表示,set中的元素是无序的,不重复的,就是去掉value的字典(dict)

  • set = {int,str,tup,bool}
  • 1>我们可以去重:
lst = ["老郑", "老吴", "老孙", "老郑", "江小白"]
print(id(lst)) #
lst = list(set(lst)) # 先把list转变成set(去重),然后再转变成list,数据强行转化,就直接括起来
print(lst, id(lst)) # ['老孙', '老郑', '老吴', '江小白'] 1524340690184
# 在去重的以后,原来的列表顺序是乱的,且生成一个新的列表

6,set的增删改查:

  • 1>增加,格式是   .add()括号里边放的内容也必须是可哈希的(不可变的)当增加重复了以后,重复的内容不会被加到set中
s = {"刘嘉玲", "关之琳", "王祖贤"}
s.add("郑裕玲")
print(s) # {'刘嘉玲', '王祖贤', '关之琳', '郑裕玲'}
  • 2>删除格式是   .remove()直接删除元素
  • 3>修改,set中没有索引,因此不能进行修改
  • 4>查,使用for循环
  • 5>set集合本⾝身是可以发生改变的. 是不可hash的. 我们可以使用frozenset来保存数据. frozenset是不可变的. 也就是⼀一个可哈希的数据类型
s = frozenset(["赵本山", "刘能", "皮长山", "常规"])
dic = {s: ""} # 此时s就是一个不可变,可哈希的了
print(dic) #{frozenset({'常规', '皮长山', '刘能', '赵本山'}): '123'}

7,深浅拷贝:  格式是   .copy()     lst2 = lst1.copy()

  • 1>浅拷贝(进行赋值操作,实际上是引用内存地址的赋值,内存中此时只有一个变量,浅拷贝以后的2个比赛能力是哪个指向同一个内存地址)
lst1 = ["金毛狮王", "紫衫龙王", "白眉鹰王", "青翼蝠王"]
lst2 = lst1
print(lst1, id(lst1)) # ['金毛狮王', '紫衫龙王', '白眉鹰王', '青翼蝠王'] 2644564539336
print(lst2, id(lst2)) # ['金毛狮王', '紫衫龙王', '白眉鹰王', '青翼蝠王'] 2644564539336
lst1.append("杨逍")
print(lst1) # ['金毛狮王', '紫衫龙王', '白眉鹰王', '青翼蝠王', '杨逍']
print(lst2) # ['金毛狮王', '紫衫龙王', '白眉鹰王', '青翼蝠王', '杨逍']
  • dict,set,list都是一样的效果,把内存地址赋值给变量,所以其中一个变量变,其他变量也跟着变,且注意浅拷贝只是拷贝了没有嵌套的元素,子元素并没有拷贝
  • 2>深度拷贝:import copy     copy.deepcopy(  )
import copy
lst = ["老郑", "老吴", "老孙", ["老郑", "江小白"]]
lst1 = copy.deepcopy(lst)
lst.append("撸串")
print(lst) # ['老郑', '老吴', '老孙', ['老郑', '江小白'], '撸串']
print(lst1) # ['老郑', '老吴', '老孙', ['老郑', '江小白']]
print(id(lst)) #
print(id(lst1)) #  

基本数据类型操作的补充和set的基本操作的更多相关文章

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

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

  2. Django models 操作高级补充

    Django models 操作高级补充 字段参数补充: 外键 约束取消 ..... ORM中原生SQL写法: raw connection extra

  3. redis(一) 安装以及基本数据类型操作

    redis(一) 安装以及基本数据类型操作 redis安装和使用 redis安装 wget http://download.redis.io/redis-stable.tar.gz tar zxvf ...

  4. Python数据分析与展示[第三周](pandas数据类型操作)

    数据类型操作 如何改变Series/ DataFrame 对象 增加或重排:重新索引 删除:drop 重新索引 .reindex() reindex() 能够改变或重排Series和DataFrame ...

  5. Redis(二) 数据类型操作指令以及对应的RedisTemplate方法

    1.Redis key值操作以及RedisTemplate对应的API 本文默认使用RedisTemplate,关于RedisTemplate和StringRedisTemplate的区别如下 Red ...

  6. python运算符,数据类型,数据类型操作,三目运算,深浅拷贝

    算数运算符: Py2中精确除法需要导入:from __future__ import division,(符由特  ,将来的.滴未省,除法) py3不需要导入 赋值运算符: 比较运算符: 成员运算符: ...

  7. 笔记——malloc、free、不同数据类型操作、.pyc文件、python安装第三方包、验证一个网站的所有链接有效性

    C — malloc( ) and free( ) C 语言中使用malloc( )函数申请的内存空间,为什么一定要使用free释放? **malloc()函数功能:是从堆区申请一段连续的空间,函数结 ...

  8. SQL Server 2008 对XML 数据类型操作

    原文 http://www.cnblogs.com/qinjian123/p/3240702.html 一.前言 从 SQL Server 2005 开始,就增加了 xml 字段类型,也就是说可以直接 ...

  9. Loadrunner脚本编程(4)-数据类型操作和字符串操作

    http://www.360doc.com/content/10/0806/13/1698198_44078277.shtml 一,数据类型转换 没有使用过C编程的LoadRunner脚本编写者会发现 ...

随机推荐

  1. 第3节 mapreduce高级:4、倒排索引的建立

    倒排索引建立 需求分析 需求:有大量的文本(文档.网页),需要建立搜索索引 最终实现的结果就是哪个单词在哪个文章当中出现了多少次 思路分析: 首选将文档的内容全部读取出来,加上文档的名字作为key,文 ...

  2. 「 Luogu P1122 」 最大子树和

    # 题目大意 真讨厌题面写的老长老长的. 这个题的意思就是给定一棵无根树,每个节点都有一个美丽值(可能是负数),可以删掉一些边来删除某些点,现在要求你求出可以删掉任意条边的情况下,这个树上的剩余节点的 ...

  3. Python 函数递归-三元表达式-列表生成式-字典生成式-匿名函数-内置函数

    上节课复习: 1. 无参装饰器 def 装饰器名字(func): def wrapper(*args,**kwargs): res = func(*args,**kwargs) return res ...

  4. Python和Java的语法对比,语法简洁上python的确完美胜出

    Python是一种广泛使用的解释型.高级编程.通用型编程语言,由吉多·范罗苏姆创造,第一版发布于1991年.可以视之为一种改良(加入一些其他编程语言的优点,如面向对象)的LISP.Python的设计哲 ...

  5. PHP 真值与空值

    本文参考 http://php.net/manual/en/types.comparisons.php. 1. isset bool isset ( mixed $var [, mixed $... ...

  6. noi.ac NOIP2018 全国热身赛 第二场 T3 color

    [题解] 我们可以发现每次修改之后叶子结点到根的路径最多分为两段:一段白色或者黑色,上面接另一段灰色的.二分+倍增找到分界点,然后更新答案即可. check的时候只需要判断当前节点对应的叶子结点的区间 ...

  7. 51NOD 2370 奈芙莲的护符

    >>这是原题传送门<< 答案参考来自 http://www.cnblogs.com/sugewud/p/9822933.html 思路:看到取值范围之后,仅有的思路还是暴力

  8. C51 蜂鸣器 个人笔记

    音调:频率 音量:高低电平占空比 有源:上面没有加号,只需高低电平即可发声 无源:上面有加号,不仅要电平,还要, 的频率 这里的有源不是指电源的"源",而是指有没有自带震荡电路,有 ...

  9. 关于oracle 压缩表

    这周客户的问题非常多,总是说我的数据不对.于是我对数据梳理了以后发现以前认为是重复数据的,其实并不是,而是我忽略了一个维度.那么这样一来,我们的周详单表就会有500多万的数据.一个月按照4周计算,就要 ...

  10. Windows Server 2012 防火墙如何添加端口例外的方法(转)

    Windows Server 2012 防火墙如何添加端口例外的方法 Windows Server 2012 防火墙如何添加端口例外的方法 在Windows Server 2012系统中,如果用户想在 ...