#yyds干货盘点# 6. Python 元组,不可变的列表,滚雪球学 Python

梦想橡皮擦 2021-11-25 14:30:45
编程语言 Python 数据 数据类型 Bash

希望看到文章的 Python 学习爱好者可以坚持打卡,在评论区坚持跟橡皮擦卡学习的朋友,在 100 天之后,橡皮擦将送出神秘大奖

六、Python 元组,不可变的列表

今天新学习的概念叫做元组,其实学元组还是离不开列表,第一个知识点是元组的英文 tuple 要牢牢记住,第一个知识点是元组与列表的区别,列表的元素可以修改,元组的元素不可以修改,所以元素又可以称为不可变的列表,好了元组学习完毕了。

6.1 元组的定义

列表用中括号 [] 进行定义,元组用小括号 () 进行定义,元组的语法格式如下:

# my_tuple 是元组变量名,可以任意命名
my_tuple = (元素1,元素2,元素3...)

  • 1.
  • 2.

元组中的每一个数据也称为元素,元素也可以是数字、字符串或者列表等内容,输出使用 print 函数即可。

特别注意如果元组内的元素只有一个,需要在定义的时候在元素的右侧增加一个英文逗号 ,,例如:

# 只有一个元素
my_tuple = (元素1,)

  • 1.
  • 2.

下面就在 PyCharm 中进行一下实际的编码吧。

# 声明一个元组对象
my_tuple = (1, 2, 3)
print(my_tuple)
print(type(my_tuple))
# 声明一个元组对象
my_tuple1 = ("www", "aaa", "ggg")
print(my_tuple1)
print(type(my_tuple1))
# 声明只有一个元素的元组对象
my_tuple2 = ("www", )
print(my_tuple2)
print(type(my_tuple2))

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.

6.2 读取元组中的元素

有列表在前,该部分学期起来就比较简单了,在元组中获取元素也是通过中括号 [] 加上索引的方式,与列表保持一致。

列表也可以通过循环去输出,可以自行通过 for 循环进行尝试。

列表中的元素可以通过索引去修改,但是元组不可以,以下代码会出现错误。

# 声明一个元组对象
my_tuple = ("www", "aaa", "ggg")
my_tuple[1] = "good"
print(my_tuple)

  • 1.
  • 2.
  • 3.
  • 4.

该错误提示如下:

TypeError: 'tuple' object does not support item assignment

  • 1.

原因为本篇博客开始提及的元组不允许修改元素,上述错误翻译之后表示 tuple 对象不支持赋值。

6.3 元组的其他知识补充

由于元组与列表太相似了,接下来的一些知识点只做简单罗列。

  • 切片适用于元组
  • 列表方法中不涉及修改列表元素的方法都可用于元组,例如 lencount …,如果列表方法会对元素进行修改,那不可用于元组,例如 appendinsert… 如果想详细查阅,回忆 dir 方法。
  • 部分列表可用的内置函数同样适用于元组,例如 maxmin

6.4 元组与列表转换

在开发代码的过程中,有时需要对列表与元组进行相互转换,该转换类似之前学习过的强制转换的过程,核心的内置函数为 listtuple

将元组修改为列表。

my_tuple = ("www", "aaa", "ggg")
my_list = list(my_tuple)
print(my_list)

  • 1.
  • 2.
  • 3.

将列表修改为元组。

my_list = ["www", "aaa", "ggg"]
my_tuple = tuple(my_list)
print(my_tuple)

  • 1.
  • 2.
  • 3.

6.5 内置函数 zip

函数 zip 可以将一个可迭代对象,如列表打包成元组,打包之后返回的是一个 zip 对象,说起来有点绕,而且应用的场景不是很明确,可以先看代码学习一下。

en_names = ["apple", "orange", "pear"]
cn_names = ["苹果", "橘子", "梨"]
zipData = zip(en_names, cn_names)
print(zipData) # 打印 zipData
print(type(zipData)) # 打印 zipData 数据类型
print(list(zipData)) # 输出 zipData 中的数据内容

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

输出结果:

<zip object at 0x0000024C1E4FF648>
<class 'zip'>
[('apple', '苹果'), ('orange', '橘子'), ('pear', '梨')]

  • 1.
  • 2.
  • 3.

通过代码你可以看到,zip 把两个列表的数据合并了,每个列表中对应索引位置的元素合并在了一个元组里面。上述代码中就出现了 apple苹果 对应,orange橘子 对应,pear 对应。

如果放在 zip 函数的列表参数长度不相同,那 zip 会选择元素最少的那个列表作为依据,形成对应关系。

en_names = ["apple", "orange"]
cn_names = ["苹果", "橘子", "梨"]
zipData = zip(en_names, cn_names)
print(zipData) # 打印 zipData
print(type(zipData)) # 打印 zipData 数据类型
print(list(zipData)) # 输出 zipData 中的数据内容

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

该代码第一个列表有 2 个元素,第二个列表有 3 个元素,最终输出的结果为:

<zip object at 0x0000026DE2F7F608>
<class 'zip'>
[('apple', '苹果'), ('orange', '橘子')]

  • 1.
  • 2.
  • 3.

如果在 zip 中的参数前面增加 * 符号,相当于解压,返回二维矩阵式。

代码如下:

en_names = ["apple", "orange"]
cn_names = ["苹果", "橘子", "梨"]
zipData = zip(en_names, cn_names)
print(zipData) # 打印 zipData
unzipData = zip(*zipData)
print(unzipData) # 打印 unzipData
print(list(unzipData)) # 打印 unzipData 内容

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

6.6 元组的功能与应用场景

元组既然与列表这么相似,那为何 Python 还要专门设计一个元组数据类型来呢?

相比于列表,元组有如下优点。

  1. 因为其不可修改,可以保护数据;
  2. 元组在底层数据结构上比列表简单,占用的资源少,程序执行速度快;(说了也不用记住的知识)
  3. 元组很多时候回用作函数的返回值。(后续知识)

6.7 这篇博客的总结

元组与列表就像是两个相似的亲兄弟,只在外观上有一点点区别,核心的区别是一个可以被修改(列表),一个不可以被修改(元组),其它的差异都是基于此衍生出来的,所以掌握这个内容之后,你能对比着学会这两个知识点。

最后一碗毒鸡汤

只要坚持下去,总会有失败的一天。 O(∩_∩)O 哈哈~


今天是持续写作的第 <font color=“red”>5</font> / 100 天。
如果你有想要交流的想法、技术,欢迎在评论区留言。


版权声明
本文为[梦想橡皮擦]所创,转载请带上原文链接,感谢
https://blog.51cto.com/cnca/4685043

  1. Python爬虫编程思想(85):在Python中使用非关系型数据库
  2. Volume de réglage audio Python (avec Code) | outils Python
  3. Python crawler programming idea (59): get attribute value and text with beautiful soup CSS selector
  4. Python crawler programming idea (57): basic usage of CSS selector in beautiful soup
  5. Python crawler programming idea (55): find of beautiful soup method selector_ All method
  6. Python crawler programming idea (54): use beautiful soup to select sibling nodes
  7. Python crawler programming idea (53): use beautiful soup to select the parent node
  8. Django3.0 solves the problem of error reporting in reverse parsing
  9. Precautions for Python crawler
  10. Python 3 crawler series (1) -- climbing blind date websites
  11. Python到底是什么?为什么要学Python?
  12. #yyds干货盘点#Pandas数据清洗实用指南
  13. Python打包exe文件无法运行
  14. Two common ways to save files in Python
  15. #yyds幹貨盤點#Pandas數據清洗實用指南
  16. Yyds Dry Inventory pandas Data Cleaning Practical Guide
  17. PYTHON用LSTM长短期记忆神经网络的参数优化方法预测时间序列洗发水销售数据
  18. Python集成学习:自己编写构建AdaBoost分类模型可视化决策边界及sklearn包调用比较
  19. Python 3 makes a search software
  20. Python 3 simulated microblog login
  21. Using Python 3 to make practical software for drawing modification
  22. About HTML (acceptable to Python)
  23. Python集成學習:自己編寫構建AdaBoost分類模型可視化决策邊界及sklearn包調用比較
  24. PYTHON用LSTM長短期記憶神經網絡的參數優化方法預測時間序列洗發水銷售數據
  25. Python Integrated Learning: Writing and Constructing adaboost Classification Model Visualized decision Boundary and sklearn package Calling Comparison
  26. Python prédit les données de vente de shampooing de séries chronologiques en utilisant la méthode d'optimisation des paramètres du réseau neuronal de mémoire à court et à long terme lstm
  27. [zero basics of Python to introduction] a prerequisite for Python preparatory knowledge -- basic coding specification of Python
  28. OpenCV对比度亮度变换竟能用来去水印(附Python/C++源码)
  29. [zero basics of Python to getting started] a prerequisite for Python preparatory knowledge -- installing the visualization tool pycharm
  30. The test modifies main.py in micro python
  31. Microphoton experimental circuit board based on mm32f3273 - does not work normally
  32. Run micropathon on mm32f3273 to test performance
  33. Design mm32f3277 micro Python experimental board with SD card
  34. Mm32f3277 corresponding interface files during microphoton migration
  35. Mm32f3277 microphoton experimental board design and software testing
  36. Making and testing mm32f3277 microphoton minimum circuit board
  37. Download mm32-link program automatically with Python simulated mouse
  38. A curriculum of "artificial intelligence Python machine learning and deep learning"
  39. Test the basic functions of mm32 microphoton test circuit board
  40. Test the basic functions of the mm32f3277 micro Python development board flying one by one
  41. Debugging mm32f3277 from zhufei, transplanted with micro Python development board
  42. Recognizing numbers using OpenCV and python
  43. 真的太香了,Python速查表终于出中文版了
  44. Django REST Framework(DRF)教程:快速入门
  45. python django objects filter过滤查询:startswith year
  46. Data encapsulation of Excel test cases in Python
  47. 学员管理系统python
  48. 肝了一夜,8000字概括精髓,pandas必知必会50例!
  49. Python竟然可以画漫画!漫画版的故宫导游图,来袭!
  50. Networkx graph theory Dijkstra algorithm shortest path implementation, Python
  51. Draw a HelloWorld with Python turtle Library
  52. 运行django的服务器内存使用偶尔跳高一点,重启服务马上下来,是内存泄露吧
  53. Basic usage of Python tqdm module in machine learning training
  54. Python -- basic usage method and basic template of argparse module
  55. python-sockertserver并发编程思想
  56. Programmation simultanée du serveur de sockets Python
  57. Vue+Django 旅游网项目 首页前端实现
  58. Classic usage of pandas: iloc and LOC of data filtering
  59. Calendar module of Python time series
  60. A super easy to use Python standard library. It's great to operate directories and files