一、基础数据类型的扩展

1.1GBK ---> UTF - 8

  1. # str --->bytes
  2. s1 = '太白' # 字符串是unicode编码
  3. b1 = s1.encode('gbk') # 翻译成gbk编码的形式
  4. print(b1) # b'\xcc\xab\xb0\xd7' 两位
  5. s2 = b1.decode('gbk') # 解码成字符串
  6. print(s2)
  7. b2 = s2.encode('utf-8') # 翻译成UTF- 8编码的形式
  8. print(b2) # b'\xe5\xa4\xaa\xe7\x99\xbd' 三位

1.2  字母可以直接在GBK和UTF-8之间转换

  1. s1 = 'alex'
  2. b1 = s1.encode('gbk')
  3. s2 = b1.decode('utf-8')
  4. print(s2)

注意:上面的代码成立:因为utf-8 gbk Unicode等编码的英文字母,数字,特殊字符都是映射的ASCII码。

2、元组

  1. # 如果元组中只有一个数据,且没有逗号,该元组与里面的数据的数据类型相同。
  2. tu1 = (1,)
  3. tu2 = ('alex')
  4. tu3 = ([1,2,3])
  5. print(tu1,type(tu1)) # (1,) <class 'tuple'>
  6. print(tu2,type(tu2)) # alex <class 'str'>
  7. print(tu3,type(tu3)) # [1, 2, 3] <class 'list'>

3.1 列表的相加

  1. # 列表是可以相加的
  2. l1 = [1,2,3]
  3. l2 = [4,5,6,1,2,3]
  4. l3 = l1 + l2
  5. print(l3) # [1, 2, 3, 4, 5, 6]

注意:列表是可以相加的,但是不能相减

3.2列表的删除

注意:再循环一个列表时,如果对列表中的某些元素进行删除,那么次元素后面的所有元素就会向前进一位,他们的索引就会发生变化。

列表的三种删除方式:

  1. 例题 :删除索引为奇数位的元素,形成新的列表
  1. # 方法一 :切片+步长
  2. l1 = [11,22,33,44,55,66,77]
  3. print(l1[::2]) # [11, 33, 55, 77]
  4. # 方法二: 创建新列表
  5. l1 = [11,22,33,44,55,66,77]
  6. l2 = []
  7. for i in l1:
  8. if l1.index(i) % 2 == 0:
  9. l2.append(i)
  10. l1 = l2
  11. print(l1)
  12. # 方法三:倒序删除
  13. l1 = [11,22,33,44,55,66,77]
  14. for i in range(len(l1)-1,-1,-1): # 倒序循环
  15. #print(i)
  16. if i % 2 == 1:
  17. l1.pop(i) # 按照索引去删除
  18. print(l1)

4.1字典的三种创建方式

  1. # (1)直接创建
  2. dic1 = {'name':'alex','age':28,'sex':'M'}
  3. # (2)fromkeys()创建
  4. dic = dict.fromkeys([1,2,3],'alex')
  5. print(dic) # {1: 'alex', 2: 'alex', 3: 'alex'} 值的内存地址指向同一个
  6. # (3)通过 dict()创建
  7. dic = dict({'name':'alex','age':28,'sex':'M'}) # 存在即合理
  8. print(dic)

4.2 如何在循环时删除字典的值: 创建一个列表,再循环列表时删除字典的数据

  1. dic1 = {'key1': 'alex1', 'key2': 'alex2', 'key3': 'alex3','name':'wusir'}
  2. # 将dic的健中含有k的元素的所有键值对删除。
  3. key = []
  4. for k in dic1.keys():
  5. key.append(k)
  6. for i in key:
  7. if "k" in i:
  8. dic1.pop(i)
  9. print(dic1)

注意:dictionary changed size during iteration : 再循环一个字典时,不能改变字典的大小

5、基础数据类型之间的转换

     5.1int str bool 三者的转换

  1. # int str bool 三者的转换
  2. # str <---> bytes # encode() decode()
  3. # str <---> list
  4. s1 = 'alex wusir taibai'
  5. l1 = s1.split()
  6. print(l1) # ['alex', 'wusir', 'taibai']
  7. # list <---> str
  8. l1 = ['alex', 'wusir', 'taibai']
  9. s2 = ' '.join(l1)
  10. print(s2) # 'alex wusir taibai'

5.2元组 <---> list

  1. # 元组 <---> list
  2. tu2 = (0,2,3)
  3. l1 = list(tu2)
  4. print(l1) # [0, 2, 3]

5.3字典<--->list

  1. # 字典<--->list
  2. dic1 = {'key1': 'alex1', 'key2': 'alex2', 'key3': 'alex3','name':'wusir'}
  3. l1 = list(dic1) # 可以将字典的key取出来,形成列表
  4. print(l1) # ['key1', 'key2', 'key3', 'name']
  5. # 其他形式的转化 :keys() values() items()

6、集合

  1. set1 = {'alex',[1,2],1,2,3} # unhashable type: 'list'
  2. set2 = {'alex','wusir'}
  3. set3 = set({'alex','wusir','alex'}) # set转化为集合,集合有去重的特性
  4. print(set3)

6.1关系测试

  1. set1 = {1,2,3,4,5}
  2. set2 = {4,5,6,7,8,9}
  3. 交集
  4. print(set1 & set2)
  5. print(set1.intersection(set2))
  6.  
  7. # 并集
  8. print(set1 | set2)
  9. print(set1.union(set2))
  10.  
  11. # 反交集
  12. print(set1 ^ set2)
  13. print(set1.symmetric_difference(set2))
  14.  
  15. # 差集
  16. print(set1- set2)
  17. print(set1.difference(set2))
  18.  
  19. # 子集
  20. set1 = {1,2,3}
  21. set2 = {1,2,3,4,5,6}
  22. print(set1 < set2)
  23. print(set1.issubset(set2))
  24.  
  25. # 超集
  26. set1 = {1,2,3}
  27. set2 = {1,2,3,4,5,6}
  28. print(set2 > set1)
  29. print(set2.issuperset(set1))

6.2 集合转换元组

  1. set1 = {1,2,3}
  2. set3 = frozenset(set1) # 转换成元组 ***
  3. print(set3) # frozenset({1, 2, 3})

7.1赋值运算

  1. 1 = [1,2,3]
  2. l2 = l1
  3. l1.append(666)
  4. print(l2)
  5. print(id(l1))
  6. print(id(l2)) # 指向同一个内存地址

8、深浅copy

  1. # (1) 浅copy
  2. l1 = [1,2,3,[22,]]
  3. l2 = l1.copy()
  4. # l1.append('alex')
  5. # print(l1,l2)
  6. # print(id(l1),id(l2)) # 指向不同一个内存地址
  7. l1[-1].append('taibia ')
  8. print(l1,l2)
  9. print(id(l1)) # 内存地址不相同
  10. print(id(l2))
  11. print(id(l1[-1])) # 内存地址相同
  12. print(id(l2[-1]))

  1. # (1)深copy
  2. import copy
  3. l1 = [1,2,3,[22,]]
  4. l2 = copy.deepcopy(l1)
  5. # print(l1,l2)
  6. # l1.append(666)
  7. l1[-1].append('太白')
  8. print(l2)

Python基础学习Day7 基础数据类型的扩展 集合 深浅copy的更多相关文章

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

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

  2. python之路--基础数据类型的补充与深浅copy

    一 . join的用法 lst =['吴彦祖','谢霆锋','刘德华'] s = '_'.join(lst) print(s) # 吴彦祖_谢霆锋_刘德华 # join() "*" ...

  3. python之路(集合,深浅copy,基础数据补充)

    一.集合:类似列表,元组的存储数据容器,不同点是不可修改,不可重复.无序排列. 1.创建集合: (1).set1 = {'abby', 'eric'} result:{'eric', 'abby'} ...

  4. python基础之 编码进阶,文件操作和深浅copy

    1.编码的进阶 字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码.即先将其他编码的字符串解码(decode)成unicode,再从unic ...

  5. python基础3(元祖、字典、深浅copy、集合、文件处理)

    本次内容: 元祖 字典 浅copy和深copy 集合 文件处理 1.1元祖 元祖(tuple)与列表类似,不同之处在于元祖的元素不能修改,元祖使用小括号(),列表使用方括号[].元祖创建很简单,只需要 ...

  6. 基础数据类型的补充和深浅copy

    一:关于str 的操作方法补充 1,s.isspace()   判断字符串是否只由空格组成,是,为True,否则,为False. s = ' ' #只能是以至少一个空格组成的字符串(全空格) prin ...

  7. Python中的代码块及其缓存机制、深浅copy

    一.代码块及其缓存机制 代码块 一个模块.一个函数.一个类.一个文件等都是一个代码块:交互式命令下,一行就是一个代码块. 同一个代码块内的缓存机制(字符串驻留机制) 机制内容:Python在执行同一个 ...

  8. python--基础数据类型的补充与深浅copy

    一 . join的用法 lst =['吴彦祖','谢霆锋','刘德华'] s = '_'.join(lst) print(s) # 吴彦祖_谢霆锋_刘德华 # join() "*" ...

  9. python基础学习day7

    基础数据类型的补充:编码的进阶 str capitalize() 首字母(第一个单词)大写,其余变小写 s1 = 'I LIVE YOU' print(s1.capitalize()) >> ...

随机推荐

  1. raid1与raid5

    raid 1 就是两个磁盘同时读同时写, 当其中一个坏了 不影响使用, 直接更换一个,这样磁盘的容量只有一个盘的raid 5 就是 N-1个磁盘的容量,当其中任何一个磁盘坏,不影响使用,更换一个就可以 ...

  2. phpmyadmin无登录表单无法登陆

    发现我的博客的phpmyadmin登录过一次成功之后,后面在登录没有登录表单了,查了很多原因,下面的方法亲测可以解决 打开 phpMyAdmin\libraries\plugins\auth\Auth ...

  3. 关于js中的时间——计算时间差等

    获取当前(系统)时间: var NowDate= new Date(); // 获取当前日期时间 // 输出为: Wed May 03 2017 14:52:08 GMT+0800 (中国标准时间) ...

  4. 部署django项目,sqlite3数据库出错sqlite3.NotSupportedError: URIs not supported

    如果遇到这个错误 sqlite3.NotSupportedError: URIs not supported 修改类似 该路径 的 base.py文件 /root/.virtualenvs/fkPy3 ...

  5. StringBuffer 清除内容

    在开发的时候,经常使用StringBuffer来进行字符串的拼接.如果反复的做字符串拼接时,有时需要清空Stringbuffer中的内容,然后再拼接新的字符串信息. StringBuffer提供了以下 ...

  6. 实用的DDos攻击工具

    来源: http://www.safecdn.cn/linux/2018/12/ddos/95.html ‎ 特别提示:仅用于攻防演练及教学测试用途,禁止非法使用 Hyenae 是在windows平台 ...

  7. Flex的一些小实例

    1,以上是一个导航菜单 2一下是一个撑开的mx:Spacer

  8. uri,url和urn的区别以及URLEncoder

    java.net.URL类不提供对标准RFC2396规定的特殊字符的转义,因此需要调用者自己对URL各组成部分进行encode.而java.net.URI则会提供转义功能.因此The recommen ...

  9. java swing 制作一个登陆界面,亲测有效

    一.介绍 Swing 是一个为Java设计的GUI工具包. Swing是JAVA基础类的一部分. Swing包括了图形用户界面(GUI)器件如:文本框,按钮,分隔窗格和表. Swing提供许多比AWT ...

  10. 尚硅谷springboot学习10-@PropertySource,@ImportResource,@Bean

    @PropertySource 使用指定的属性文件而不一定是application.xxx 同样可以注入相关内容 @ImportResource 导入Spring的配置文件,让配置文件里面的内容生效: ...