www.91084.com

GVKun编程网logo

元组比 Python 中的列表更有效吗?(python中元组和列表的区别)

14

本文的目的是介绍元组比Python中的列表更有效吗?的详细情况,特别关注python中元组和列表的区别的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解元组比Pytho

本文的目的是介绍元组比 Python 中的列表更有效吗?的详细情况,特别关注python中元组和列表的区别的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解元组比 Python 中的列表更有效吗?的机会,同时也不会遗漏关于6. Python 元组,不可变的列表,滚雪球学 Python、Python 2如何比较string和int?为什么列表比数字大,元组比列表大?、python – 只将非空列表转换为列表列表中的元组、python – 在元组列表列表中拆分元组列表的知识。

本文目录一览:

元组比 Python 中的列表更有效吗?(python中元组和列表的区别)

元组比 Python 中的列表更有效吗?(python中元组和列表的区别)

在实例化和检索元素时,元组和列表之间是否存在性能差异?

6. Python 元组,不可变的列表,滚雪球学 Python

6. Python 元组,不可变的列表,滚雪球学 Python

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

已完成的文章

标题 链接
1. 这才是 Python 学习的正确起手姿势,滚雪球学 Python https://dream.blog.csdn.net/article/details/109586142
2. 无门槛学会数据类型与输入、输出函数,滚雪球学 Python https://dream.blog.csdn.net/article/details/109697047
3. 无转折不编程,滚雪球学 Python https://dream.blog.csdn.net/article/details/109785235
4. 列表一学完,Python 会一半,滚雪球学 Python https://dream.blog.csdn.net/article/details/109999211
5. Python 循环的本质就是一段代码懒得重复写 https://dream.blog.csdn.net/article/details/110087447

滚雪球学 Python 目录

    • 已完成的文章
  • 六、Python 元组,不可变的列表
    • 6.1 元组的定义
    • 6.2 读取元组中的元素
    • 6.3 元组的其他知识补充
    • 6.4 元组与列表转换
    • 6.5 内置函数 zip
    • 6.6 元组的功能与应用场景
    • 6.7 这篇博客的总结

本系列文章将在2021年春节前完成,欢迎关注,点赞,评论 --- 梦想橡皮擦

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

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

6.1 元组的定义

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

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

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

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

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

下面就在 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))

6.2 读取元组中的元素

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

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

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

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

该错误提示如下:

TypeError: ''tuple'' object does not support item assignment

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

6.3 元组的其他知识补充

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

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

6.4 元组与列表转换

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

将元组修改为列表。

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

将列表修改为元组。

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

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 中的数据内容

输出结果:

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

通过代码你可以看到,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 中的数据内容

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

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

如果在 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 内容

6.6 元组的功能与应用场景

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

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

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

6.7 这篇博客的总结

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

最后一碗毒鸡汤

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

想学Python爬虫,可以订阅橡皮擦专栏哦~ 点击发现惊喜


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


如果你想跟博主建立亲密关系,可以关注博主,或者关注博主公众号“非本科程序员”,了解一个非本科程序员是如何成长的。
博主 ID:梦想橡皮擦,希望大家点赞评论收藏

本文分享 CSDN - 梦想橡皮擦。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

Python 2如何比较string和int?为什么列表比数字大,元组比列表大?

Python 2如何比较string和int?为什么列表比数字大,元组比列表大?

以下代码段带有输出注释(如ideone.com所示):

print "100" < "2"      # Trueprint "5" > "9"        # Falseprint "100" < 2        # Falseprint 100 < "2"        # Trueprint 5 > "9"          # Falseprint "5" > 9          # Trueprint [] > float(''inf'') # Trueprint () > []          # True

有人可以解释为什么这样的输出吗?

实施细节

  • 语言规范规定了这种行为,还是由实施者决定?
  • 任何主要的Python实现之间都有区别吗?
  • Python语言的版本之间有区别吗?

答案1

小编典典

从python 2手册:

CPython实现细节:除数字外,其他类型的对象按其类型名称排序;不支持正确比较的相同类型的对象按其地址排序。

当你对两个字符串或两个数字类型进行排序时,将以预期的方式进行排序(字符串的字典顺序,整数的数字顺序)。

订购数字类型和非数字类型时,数字类型优先。

>>> 5 < ''foo''True>>> 5 < (1, 2)True>>> 5 < {}True>>> 5 < [1, 2]True

当你订购两个都不兼容的不兼容类型时,它们都不是数字,而是按其名称的字母顺序排序:

>>> [1, 2] > ''foo''   # ''list'' < ''str'' False>>> (1, 2) > ''foo''   # ''tuple'' > ''str''True>>> class Foo(object): pass>>> class Bar(object): pass>>> Bar() < Foo()True

一个例外是旧样式类,它总是先于新样式类。

>>> class Foo: pass           # old-style>>> class Bar(object): pass   # new-style>>> Bar() < Foo()False

语言规范规定了这种行为,还是由实施者决定?

有没有语言规范。该语言参考说:

否则,不同类型的对象总是比较不相等,并且被一致地,任意地排序。

因此,这是一个实现细节。

任何主要的Python实现之间都有区别吗?

我无法回答这一问题,因为我只使用了官方的CPython实现,但是还有其他Python实现,例如PyPy。

Python语言的版本之间有区别吗?

在Python 3.x中,行为已更改,因此尝试对整数和字符串进行排序将引发错误:

>>> ''10'' > 5Traceback (most recent call last):  File "<pyshell#0>", line 1, in <module>    ''10'' > 5TypeError: unorderable types: str() > int()

python – 只将非空列表转换为列表列表中的元组

python – 只将非空列表转换为列表列表中的元组

我怎么转换这个:

[[],[],[(''ef'',1)],[(''cd'',3)],[(''ab'',2)]]

进入这个:

[[],[''ef'',1],[''cd'',3],[''ab'',2]]

我知道要将元组转换为列表,我们只需使用list(元组),或者如果它是[(1,2),(3,4)]之类的列表,我们可以使用map.我如何处理主列表中列表中的元组,而空列表保持不变?

解决方法

>>> my_list = [[],2)]]

>>> [list(*el) for el in my_list]
[[],2]]

python – 在元组列表列表中拆分元组列表

python – 在元组列表列表中拆分元组列表

我有一个元组列表,如:

[(1,a),(2,b),(1,e),(3,c),(4,d),(0,(6,(8,e)]

我想把它分成每个“b”的列表列表

[[(1,b)],[(1,[(2,[(0,[(6,e)]]

有没有pythonic方式来做到这一点?

解决方法

my_list = [(1,"a"),"b"),"e"),"c"),"b")]
result,temp = [],[]

for item in my_list:
    temp.append(item)
    if item[1] == 'b':
        result.append(temp)
        temp = []

if len(temp) > 0:
    result.append(temp)

print result
# [[(1,'a'),'b')],'e'),'c'),'b')]]

今天关于元组比 Python 中的列表更有效吗?python中元组和列表的区别的分享就到这里,希望大家有所收获,若想了解更多关于6. Python 元组,不可变的列表,滚雪球学 Python、Python 2如何比较string和int?为什么列表比数字大,元组比列表大?、python – 只将非空列表转换为列表列表中的元组、python – 在元组列表列表中拆分元组列表等相关知识,可以在本站进行查询。

本文标签: