Python 入门之数据类型之间的相互转换 以及 在编程中会遇到的数据类型的坑

1、数据类型总结:

可变,不可变,有序,无序

(1)可变的数据类型:list dict set

(2)不可变的数据类型:int str bool tuple

(3)有序的数据类型:list tuple str

(4)无序的数据类型:dict set

(5)取值方式:

<1> 索引: list tuple str

<2> 键: dict

<3> 直接:int bool set

2、数据类型转换:

<1> 元组 => 列表 list(tuple)

tu = (1,23,5,4)
print(list(tu))

<2> 列表 => 元组 tuple(list)

lst = [1,23,5,4]
print(tuple(lst))

<3> list=>str str.join(list)

lst = ["1","2","3"]
print("".join(lst))

<4> str=>list str.split()

s = "alex wusir 太白"
print(s.split())

<5>转换成False的数据: 0,'',None,[],(),{},set() ==> False`

list -- str ( 重点)
lst = ["1","2","3"]
print("".join(lst))
str -- list
s = "alex wusir 太白"
print(s.split())

3、以后要遇到的坑

(1)循环添加

lst = [1,2,3,4,5,6]
for i in lst:
lst.append(7) # 这样写法就会一直持续添加7
print(lst)
print(lst)

(2)列表循环删除

列表: 循环删除列表中的每⼀个元素

li = [11, 22, 33, 44]
for e in li:
li.remove(e)
print(li)
结果:
[22, 44]

分析原因: for的运⾏过程. 会有⼀个指针来记录当前循环的元素是哪⼀个, ⼀开始这个指针指向第0 个.然后获取到第0个元素. 紧接着删除第0个. 这个时候. 原来是第⼀个的元素会⾃动的变成 第0个.然后指针向后移动⼀次, 指向1元素. 这时原来的1已经变成了0, 也就不会被删除了.

⽤pop删除试试看:

li = [11, 22, 33, 44]
for i in range(0, len(li)):
del li[i]
print(li)
结果: 报错

i= 0, 1, 2 删除的时候li[0] 被删除之后. 后⾯⼀个就变成了第0个.

以此类推. 当i = 2的时候. list中只有⼀个元素. 但是这个时候删除的是第2个 肯定报错啊

经过分析发现. 循环删除都不⾏. 不论是⽤del还是⽤remove. 都不能实现. 那么pop呢?

for el in li:
li.pop() # pop也不⾏
print(li)
结果:
[11, 22]

(3)列表循环删除成功

只有这样才是可以的:

for i in range(0, len(li)): # 循环len(li)次, 然后从后往前删除
li.pop()
print(li)

或者. ⽤另⼀个列表来记录你要删除的内容. 然后循环删除

li = [11, 22, 33, 44]
del_li = []
for e in li:
del_li.append(e)
for e in del_li:
li.remove(e)
print(li)

注意: 由于删除元素会导致元素的索引改变, 所以容易出现问题. 尽量不要再循环中直接去删 除元素. 可以把要删除的元素添加到另⼀个集合中然后再批量删除.

(4)字典的坑

dict中的fromkey(),再次重提 可以帮我们通过list来创建⼀个dict

dic = dict.fromkeys(["jay", "JJ"], ["周杰伦", "麻花藤"])
print(dic)
结果:
{'jay': ['周杰伦', '麻花藤'], 'JJ': ['周杰伦', '麻花藤']}

代码中只是更改了jay那个列表. 但是由于jay和JJ⽤的是同⼀个列表. 所以. 前⾯那个改了. 后面那个也会跟着改 

字典和集合在遍历(循环)时不能修改原来的大小(字典的长度),可以进行修改值

dict中的元素在迭代过程中是不允许进⾏删除的

dic = {'k1': 'alex', 'k2': 'wusir', 's1': '⾦⽼板'}

(5)删除key中带有'k'的元素

for k in dic:
if 'k' in k:
del dic[k] # dictionary changed size during iteration, 在循环迭代的时候不允许进⾏删除操作
print(dic)

那怎么办呢? 把要删除的元素暂时先保存在⼀个list中, 然后循环list, 再删除

dic = {'k1': 'alex', 'k2': 'wusir', 's1': '⾦⽼板'}
dic_del_list = []
for k in dic:
if 'k' in k:
dic_del_list.append(k)
for el in dic_del_list:
del dic[el]
print(dic)

最新文章

  1. [译文]通过ID, TagName, ClassName, Name, CSS selector 得到element
  2. meta 标签的作用
  3. DragSelectRecyclerView 长按滑动多选图像android特效
  4. markdown思维导图笔记
  5. 自动文档摘要评价方法:Edmundson,ROUGE
  6. 远程推送-----iOS
  7. JavaScript中闭包实现的私有属性的getter()和setter()方法
  8. PHP二分查找算法
  9. Windows Azure Storage (25) Azure Append Blob
  10. opencv 3.3.0 如何旋转图像?
  11. 基于jQuery的AJAX实现三级联动菜单
  12. 深入浅出一下Java的HashMap
  13. React—Native开发之 Could not connect to development server(Android)解决方法
  14. pandas中的时间序列基础
  15. myeclipse使用步骤总结
  16. Jenkins权限分配
  17. xilinx_all_version.lic
  18. SQL partition by的用法
  19. Gulp安装笔记(转)已经测试过
  20. jQuery队列(三)

热门文章

  1. XML 验证器
  2. Django 的 CBV&amp;FBV
  3. php+大文件上传
  4. rabbitmq 和 kafka 简单的性能测试
  5. Selenium 定位一组元素
  6. oracle备份和还原
  7. linux(centOS7)的基本操作(一) 概述
  8. 创建Stream
  9. C++拷贝构造函数心得
  10. 使用事件CreateEvent注意事项 多进程同步的方法