当前位置: 首页 > 知识库问答 >
问题:

Python列表是否保证其元素按插入顺序排列?

霍弘厚
2023-03-14

如果我有以下Python代码

>>> x = []
>>> x = x + [1]
>>> x = x + [2]
>>> x = x + [3]
>>> x
[1, 2, 3]

是否保证x始终是[1,2,3],或者是否可以对过渡元素进行其他排序?

共有3个答案

宗政博
2023-03-14

你混淆了“集合”和“列表”。集合不能保证顺序,但列表可以。

集合使用花括号声明:{}。相反,列表是用方括号声明的:[]

mySet = {a, b, c, c}

不能保证顺序,但列表可以:

myList = [a, b, c]
邵华皓
2023-03-14

简言之,是的,秩序得到了保留。总之:

一般来说,以下定义将始终适用于对象,如列表:

列表是可以包含重复元素的元素集合,其定义的顺序通常不会更改,除非明确指定这样做。堆栈和队列都是为添加和删除元素(堆栈是后进先出,队列是先进先出)提供特定(通常有限)行为的列表类型。列表是事物列表的实用表示。字符串可以看作是字符列表,因为顺序很重要(“abc”!=“bca”),并且字符串内容中肯定允许重复(“aaa”可以存在并且!=“A”)。

集合是元素的集合,这些元素不能包含重复项,并且具有不确定的顺序,可以随着时间的推移而改变,也可以不改变。集合与其说代表事物的列表,不如说它们描述了某种事物选择的范围。集合的内部结构,它的元素如何相对于彼此存储,通常不是为了传达有用的信息。在一些实现中,集合总是在内部排序;在其他实现中,排序只是未定义的(通常取决于哈希函数)。

集合是一个通用术语,指用于存储(通常是可变的)数量的其他对象的任何对象。列表和集合都是集合的一种类型。元组和数组通常不被视为集合。有些语言认为地图(描述不同对象之间的关联的容器)也是一种类型的集合。

这种命名模式适用于我所知道的所有编程语言,包括Python、C、Java、C#和Lisp(在这些语言中,列表不保持顺序将是灾难性的)。如果有人知道任何地方不是这样,请说出来,我会编辑我的答案。请注意,特定的实现可能会为这些对象使用其他名称,例如C中的vector和Algol68中的flex(这两个列表;flex在技术上只是一个可重新调整大小的数组)。

如果您的案例中由于符号在此处的具体工作方式而存在任何混淆,只需知道顺序对于列表非常重要,除非有非常好的理由相信其他情况,否则您几乎可以安全地假设列表操作保持顺序。在本例中,符号的行为与字符串(实际上只是字符列表)的行为非常相似:它接受列表的内容并将其置于另一个列表的内容之后。

如果我们有

list1 = [0, 1, 2, 3, 4]
list2 = [5, 6, 7, 8, 9]

然后呢

list1 + list2

[0, 1, 2, 3, 4] + [5, 6, 7, 8, 9]

其评估结果为

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

很像

"abdcde" + "fghijk"

产品

"abdcdefghijk"
逄边浩
2023-03-14

是的,python列表中元素的顺序是持久的。

 类似资料:
  • 问题内容: 如果我有以下Python代码 将保证始终是,或者是临时元件的其他排序可能吗? 问题答案: 是的,python列表中元素的顺序是持久的。

  • 问题内容: 我认为使用某种顺序才有意义。我想做的是在视图中包括该子句,以便该视图上的所有s都可以忽略它。但是,我担心该订单不一定会延续到,因为它没有指定订单。 是否存在一种情况,即视图指定的顺序不会反映在该视图上的select结果中(该视图中的order by子句除外)? 问题答案: 您不能指望没有显式子句的任何查询中的行顺序。如果查询有序视图,但没有包括子句,则如果它们的顺序正确,请感到惊喜,并

  • 我正试图按排序的顺序将一个元素添加到数组中。 5、6、7、9、11、0

  • 问题内容: 我注意到JSON对象中元素的顺序不是原始顺序。 JSON列表的元素呢?他们的订单得到维护吗? 问题答案: 是的,JSON数组中元素的顺序得以保留。从RFC 7159开始-JavaScript对象表示法(JSON)数据交换格式 (重点是我的): 对象是零个或多个名称/值对的 无序 集合,其中名称是字符串,值是字符串,数字,布尔值,null,对象或数组。 数组是零个或多个值的 有序 序列。

  • 问题内容: 以下代码以相同的插入顺序为我提供了输出。我阅读了Javadoc,他们甚至没有谈论插入顺序。有人可以帮助我获取正确的信息。 问题答案: 不,不是的。要保留插入顺序,请改用(javadoc)。 而且,现在优先于,因为它具有不必要的并发开销。(请参见HashMap和Hashtable之间的区别?。)

  • 问题内容: 我有以下查询,该查询基于逗号分隔的列表返回行 我希望此查询的结果以ID在列表中的顺序返回。SQL可以做到吗? 提前致谢 问题答案: 如果您需要输出以特定顺序显示,则需要使用服务器可以排序的内容来指定该顺序。不知道您要使用哪个引擎,一般的方案是创建一个临时表或使用行集构造函数将每个记录ID与所需的排序顺序配对。 例如(SQL Server)