- 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的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
如标题所示,ans_list是一个答案列表,ans_index是一个数字(答案在词汇表中的索引,但与atm无关) 这里生成的 tree.anslist 是什么? (例如,仅针对第一个),忽略迭代。 f
我目前将用户的输入存储在逗号分隔的列表中,如下所示: Userid | Options 1 | 1,2,5 用户在一个数组形式中勾选一组选项,然后用逗号连接起来 1,2,5 然后 MySQ
我目前将用户的输入存储在逗号分隔的列表中,如下所示: Userid | Options 1 | 1,2,5 用户在一个数组形式中勾选一组选项,然后用逗号连接起来 1,2,5 然后 MySQ
我想知道如何完全展平列表和包含它们的东西。除其他外,我想出了一个解决方案,它可以将具有多个元素的东西滑倒并将它们放回原处,或者在滑倒后将具有一个元素的东西拿走。 这与 How do I “flatte
我想知道如何完全展平列表和包含它们的东西。除其他外,我想出了一个解决方案,它可以将具有多个元素的东西滑倒并将它们放回原处,或者在滑倒后将带有一个元素的东西拿走。 这与 How do I “flatte
这个问题已经有答案了: Convert nested list to 2d array (3 个回答) 已关闭 7 年前。 java中有没有快捷方式可以转换 List> 到 String[][] ?
我在排序时遇到问题 List> 。我创建了一个自定义比较器,在其中编写了对数据进行排序的代码。 public class CustomComparator implements Comparator
这个问题已经有答案了: 已关闭10 年前。 Possible Duplicate: Java Generics: Cannot cast List to List? 我只是想知道为什么下面的java代
试图想出一个 LINQy 方法来做到这一点,但我什么也没想到。 我有一个对象列表<>,其中包含一个属性,该属性是逗号分隔的字母代码列表: lst[0].codes = "AA,BB,DD" lst[1
假设我有这些任务: points = [] point = (1, 2) 我怎么会这样做: points += point 它工作得很好,并且给了我点 = [1, 2]。但是,如果我这样做: poin
如何在 scala 中将 List[Task[List[Header]]] 类型转换为 Task[List[Header]]。 我有一个方法返回 Task[List[Header]] 并多次调用 do
如何在 Java 中查找二维列表的元素? 我有一个参数为 List> 的函数我想知道如何找到这个列表的行和列。 最佳答案 如果你喜欢 List> obj 然后你就可以像这样访问 obj.get(cur
分配 List到 List工作正常。 分配 List>到 List>不编译。 代码 public class Main { public static void main(String[] a
我正在用 Java 编写一个方法,该方法必须接收并迭代 Serializable 的 List。 有什么区别: public void myMethod(List list) { } 和 public
我看到很多人想用 mvvm 更新网格/列表/树的一部分,但他们不想刷新整个列表。 对于所有遇到此问题的人,我做了以下示例。 希望这对你有用。 最佳答案 这是一个简单的例子。整个代码中最重要的是: Bi
我正在为现有的 C++ 库编写包装器,该库使用列表,其中 T 是自定义结构。我被建议使用 vector 而不是列表,但我试图避免修改库。 为了更好地理解这个场景,我做了一个简单的应用程序,使用一个列表
List list List list 这两种声明有什么区别吗? 谢谢, 最佳答案 是的。 List可以包含所有派生自 Base 的不同事物的混合物. List包含同质项(从某种意义上说,它们必须全部
有人可以尽可能详细地解释以下类型之间的区别吗? List List List 让我更具体一点。我什么时候想使用 // 1 public void CanYouGiveMeAnAnswer(List l
我有一个元组列表,每个元组都是一对列表。所以我的数据看起来像: mylist = [(['foo', 'bar'], ['bar', 'bar']),(['bar', 'bar'],['bar', '
也许是一个时髦的标题,但我遇到了以下问题: 给定一个类型为 (a * b) list 的列表,我想创建一个类型为 (a * b list) list 的新列表。一个例子: 给定列表 let testL
我是一名优秀的程序员,十分优秀!