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

如果我有以下Python代码

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

是否保证x始终是[1,2,3],或者可能有其他临时元素的顺序?

255587 次浏览

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

简而言之,是的,秩序得以保留。长:

一般来说,下面的定义总是适用于像列表这样的对象:

列表是一个元素的集合,它可以包含重复的元素,并且有一个定义好的顺序,通常不会改变,除非显式地这样做。队列都是列表类型,为添加和删除元素提供特定的(通常是有限的)行为(堆栈是LIFO,队列是FIFO)。列表是事物列表的实际表现形式。字符串可以被认为是一个字符列表,因为顺序很重要("abc" != "bca"),并且字符串内容中的重复内容当然是允许的("aaa"可以存在并且!= "a")。

是一个不能包含重复元素的集合,并且具有不确定的顺序,该顺序可能随时间变化,也可能不随时间变化。集合并不表示事物的列表,而是描述某一事物选择的程度上。set的内部结构,即它的元素如何相对存储,通常并不意味着要传递有用的信息。在一些实现中,集合总是在内部排序;在其他情况下,排序是没有定义的(通常取决于哈希函数)。

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

这种命名模式适用于我所知道的所有编程语言,包括Python、c++、Java、c#和Lisp(在Lisp中,列表不按顺序排列将是灾难性的)。如果有人知道哪里不是这样的,请直接说出来,我会编辑我的答案。注意,特定的实现可能会为这些对象使用其他名称,例如c++中的向量和ALGOL 68中的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"

我想你们可能关心的一件事是这些元素是否会改变,比如,2变成了一个不同的数字。在这里你可以放心,因为在Python中,整数是不可变的,这意味着它们在创建后不能更改。

不过,Python中并非所有内容都是不可变的。例如,列表是可变的——它们可以在创建后更改。举个例子,如果你有一个列表的列表

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

这里,我改变了a的第一个条目(我向它添加了7)。人们可以想象一下,如果你不小心,就会在这里出现一些意想不到的东西(事实上,当他们开始以某种方式使用Python编程时,这种情况确实会发生在每个人身上;只要搜索这个网站“修改一个列表,同时循环它”,就能看到几十个例子)。

同样值得指出的是,x = x + [a]x.append(a)不是一回事。第二个变量改变了x,而第一个变量创建了一个新列表并将其赋值给x。要查看差异,在向x中添加任何内容之前尝试设置y = x,并尝试每一个,并查看两者对y的差异。

船向一边倾斜的=(1、2、3)

我= 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]

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

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

mySet = {a, b, c, c}

不保证顺序,但列表做到:

myList = [a, b, c]

是的,列表和元组总是有序的,而字典则不是

是的,该列表将保持为[1,2,3],除非对其执行其他操作。