Python列表是否保证其元素保持它们插入的顺序?

如果我有以下Python代码

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

x会保证总是[1,2,3] ,还是临时元素的其他顺序是可能的?

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

总之,是的,订单被保存下来。 长久以来:

一般而言,以下定义将始终适用于像列表这样的对象:

列表是可以包含重复元素的元素的集合,并且具有通常不改变的定义的顺序,除非明确地这样做。 堆栈队列都是列表types,为添加和删除元素提供特定的(通常是有限的)行为(堆栈是LIFO,队列是FIFO)。 列表是对事物列表的实际表示。 一个string可以被认为是一个字符列表,因为顺序是重要的( "abc" != "bca" ),并且在string内容中的重复项肯定是允许的( "aaa"可以存在, != "a" )。

集合是不能包含重复的元素的集合,并且具有可能随时间变化也可能不会变化的非确定顺序。 集合并不能代表事物的列表,因为它们描述的是事物的select范围。 集合的内部结构,它的元素如何相对于彼此存储,通常不是为了传达有用的信息。 在一些实现中,集合总是在内部sorting; 在其他情况下,sorting是简单的未定义的(通常取决于散列函数)。

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

这个命名scheme适用于我所知的所有编程语言,包括Python,C ++,Java,C#和Lisp(其中列表不保持顺序将特别具有灾难性)。 如果有人知道哪里不是这种情况,请说出来,然后编辑我的答案。 请注意,具体的实现可能会使用这些对象的其他名称,如C ++中的vector和ALGOL 68中的flex (这两个列表; flex在技术上只是一个可变大小的数组)。

如果由于“ +符号的具体操作而导致您的案例有任何混淆,只要知道该顺序对于列表是非常重要的,除非有充分的理由相信否则您几乎总是可以安全地假定列表操作保留订购。 在这种情况下, +号的行为与string(它实际上只是字符列表)非常相似:它将列表的内容放在另一列表的内容之后。

如果我们有

 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" 

我猜想有一点可能与你有关,就是这些条目是否可以改变,例如,这个条目就变成了一个不同的数字。 你可以在这里放心,因为在Python中,整数是不可改变的 ,这意味着它们在创build后不能改变。

不过,并不是所有的东西都是不可变的。 例如,列表是可变的,它们可以在创build后更改。 例如,如果你有一个列表的列表

 >>> a = [[1], [2], [3]] >>> a[0].append(7) >>> a [[1, 7], [2], [3]] 

在这里,我改变了第一个条目(我加了7 )。 我们可以想象,如果你不小心的话,可以把事情摆到一边,在这里得到意想不到的事情(事实上,这确实发生在每个人都以某种方式开始用Python进行编程的时候;只要search这个网站,“在循环时修改列表它“看到几十个例子)。

另外值得指出的是x = x + [a]x.append(a)不是一回事。 第二个变种x ,第一个创build一个新列表并将其分配给x 。 为了看到不同之处,在将任何内容添加到y = x之前尝试设置y = x然后尝试每一个,并查看两者对y的差异。

你混淆了“套”和“列表”。 一套不保证顺序,但列表做。

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

 mySet = {a, b, c, c} 

不保证顺序,但列表确实:

 myList = [a, b, c] 

ALIST = [1,2,3]

I = 0

 for item in aList: if i<2: aList.remove(item) i+=1 

一个列表

[2]

道德是修改列表驱动的循环中的列表,需要两个步骤:

 aList=[1,2,3] i=0 for item in aList: if i<2: aList[i]="del" i+=1 aList ['del', 'del', 3] for i in range(2): del aList[0] aList [3] 

列表和元组总是sorting而字典不是