- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Python列表与元组的异同详解由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
前言 。
“列表(list)与元组(tuple)两种数据类型有哪些区别”这个问题在初级程序员面试中经常碰到,超出面试官预期的答案往往能加不少印象分,也会给后续面试顺利进行提供一定帮助,这道题主要考察候选人对Python基本数据结构的掌握程度,属于简单类型的送分题,那么该如何来回答才不至于丢分?
相同点:都是序列类型 。
回答它们的区别之前,先来说说两者有什么相同之处。list 与 tuple 都是序列类型的容器对象,可以存放任何类型的数据、支持切片、迭代等操作 。
1
2
3
4
5
6
|
>>> foos
=
[
0
,
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
]
>>> foos[
0
:
10
:
2
]
[
0
,
2
,
4
,
6
,
8
]
>>> bars
=
(
0
,
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
)
>>> bars[
1
:
10
:
2
]
(
1
,
3
,
5
,
7
,
9
)
|
两者的操作如此相似,Python 为什么还要设计出 tuple 这种类型出来呢?这就要从它们的不同之处来寻找答案.
不同点一:不可变 VS 可变 。
两种类型除了字面上的区别(括号与方括号)之外,最重要的一点是tuple是不可变类型,大小固定,而 list 是可变类型、数据可以动态变化,这种差异使得两者提供的方法、应用场景、性能上都有很大的区别.
列表特有方法:
1
2
3
4
5
6
7
8
|
>>> foo
=
[
2
,
3
,
1
,
9
,
4
]
>>> foo.sort()
# 排序
>>> foo.insert(
5
,
10
)
# 插入
>>> foo.reverse()
# 反转
>>> foo.extend([
-
1
,
-
2
])
# 扩展
>>> foo.remove(
10
)
# 移除
>>> foo.pop()
# 弹出最后一个元素
>>> foo.append(
5
)
# 追加
|
所有的操作都基于原来列表进行更新,而 tuple 作为一种不可变的数据类型,同样大小的数据,初始化和迭代 tuple 都要快于 list 。
1
2
3
4
|
>python
-
m timeit
"[1,2,3,4,5]"
10000000
loops, best of
3
:
0.123
usec per loop
>python
-
m timeit
"(1,2,3,4,5)"
100000000
loops, best of
3
:
0.0166
usec per loop
|
同样大小的数据,tuple 占用的内存空间更少 。
1
2
3
4
5
6
|
>>> foo
=
tuple
(
range
(
1000
))
>>> bar
=
list
(
range
(
1000
))
>>> foo.__sizeof__()
8024
>>> bar.__sizeof__()
9088
|
原子性的 tuple 对象还可作为字典的键 。
1
2
3
4
5
6
7
|
>>> foo
=
(
1
,(
2
,
3
))
>>> d
=
{foo:
1
}
>>> bar
=
(
1
, [
2
,
3
])
# 非原子性tuple,因为元组中包含有不可哈希的list
>>> d
=
{bar:
1
}
Traceback (most recent call last):
File
"<stdin>"
, line
1
,
in
<module>
TypeError: unhashable
type
:
'list'
|
不同点二:同构 VS 异构 。
tuple 用于存储异构(heterogeneous)数据,当做没有字段名的记录来用,比如用 tuple 来记录一个人的身高、体重、年龄.
1
|
person
=
(
"zhangsan"
,
20
,
180
,
80
)
|
比如记录坐标上的某个点 。
1
|
point
=
(x, y)
|
而列表一般用于存储同构数据(homogenous),同构数据就是具有相同意义的数据,比如下面的都是字符串类型 。
1
|
[
"zhangsan"
,
"Lisi"
,
"wangwu"
]
|
再比如 list 存放的多条用户记录 。
1
|
[(
"zhangsan"
,
20
,
180
,
80
), (
"wangwu"
,
20
,
180
,
80
)]
|
因为 tuple 作为没有名字的记录来使用在某些场景有一定的局限性,所以又有了一个 namedtuple 类型的存在,namedtuple 可以指定字段名,用来当做一种轻量级的类来使用.
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.
原文链接:https://foofish.net/list-different-with-tuple.html 。
最后此篇关于Python列表与元组的异同详解的文章就讲到这里了,如果你想了解更多关于Python列表与元组的异同详解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我是 iOS 开发新手。我想弄清楚这些事情。 iPhone 和 iPad 中的一个项目。两者有什么相同之处(编码、图形或 UI)? 应用的设计模式相同还是不同? 等待答复谢谢:) 最佳答案 就我个人而
灵感来自 Learning Python from Ruby; Differences and Similarities . 我正好相反——我非常精通 Python,但我需要尽快开始学习 Ruby(稍
我非常了解鲁比。我相信我现在可能需要学习 Python。两者都知道的 friend ,请问两者有什么概念相似,有什么不同? 我正在寻找一个类似于我为 Learning Lua for JavaScri
根据我的阅读,OpenGL ES 2.0 似乎与 OpenGL 2.1 不同任何,这是我之前的假设。 我很想知道 OpenGL 3 是否与 OpenGL ES 2.0 相当。换句话说,考虑到我要为桌面
我是一名优秀的程序员,十分优秀!