如果我有以下Python代码
>>> x = []
>>> x = x + [1]
>>> x = x + [2]
>>> x = x + [3]
>>> x
[1, 2, 3]
x
保证永远是[1,2,3]
,还是其他临时元素的排序?
答案 0 :(得分:402)
是的,python列表中元素的顺序是持久的。
答案 1 :(得分:72)
简而言之,是的,订单得以保留。长期:
通常,以下定义将始终适用于列表等对象:
列表是一组元素,可以包含重复的元素,并且具有定义的顺序,除非明确指示,否则通常不会更改。 堆栈和队列都是列表类型,它们为添加和删除元素提供特定(通常是有限的)行为(堆栈为LIFO,队列为FIFO)。列表是事物列表的实际表示。字符串可以被视为字符列表,因为顺序很重要("abc" != "bca"
)并且当然允许字符串内容中的重复项("aaa"
可以存在并且!= "a"
)
集合是一组元素,它们不能包含重复项,并且具有可能会或可能不会随时间变化的非确定顺序。集合不代表事物列表,而是描述某些事物的范围。集合的内部结构,其元素如何相对于彼此存储,通常并不意味着传达有用的信息。在一些实现中,集合总是在内部排序;在其他情况下,排序只是未定义(通常取决于散列函数)。
集合是一个通用术语,指的是用于存储(通常是可变的)其他对象数量的任何对象。列表和集合都是一种集合。元组和数组通常不被视为集合。有些语言也认为 maps (描述不同对象之间关联的容器)也是一种集合。
这种命名方案适用于我所知道的所有编程语言,包括Python,C ++,Java,C#和Lisp(其中不保持秩序的列表特别具有灾难性)。如果有人知道任何情况并非如此,请说出来,我会编辑我的答案。请注意,特定实现可能会使用这些对象的其他名称,例如C ++中的 vector 和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 :(得分:5)
你混淆了'套'和'清单'。套装不保证订单,但是列表可以。
使用大括号声明集合:{}
。相反,列表使用方括号声明:[]
。
mySet = {a, b, c, c}
不保证订单,但列表确实:
myList = [a, b, c]
答案 3 :(得分:3)
我想可能与你有关的一件事是,条目是否可以改变,例如,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
。要查看差异,请尝试设置y = x
,然后向x
添加任何内容并尝试每个内容,并查看两者对y
的差异。
答案 4 :(得分:1)
是的,除非您对其执行其他操作,否则列表将保持为 [1,2,3]。
答案 5 :(得分:0)
aList = [1,2,3]
i = 0
for item in aList:
if i<2:
aList.remove(item)
i+=1
aList
[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]
答案 6 :(得分:0)
列表和元组总是在字典不是
时排序