如果我具有以下Python代码

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


可以保证x始终为[1,2,3],还是可以对临时元素进行其他排序?

评论

根据定义,列表是项目的有序序列,可通过其索引访问。

#1 楼

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

评论


这是正确的答案,所以我不想添加其他答案。他还可以使用list.append真正使自己的想法放松。 docs.python.org/2/tutorial/datastructures.html

– NG。
2012年12月4日,0:15

如果我从函数返回本地列表,然后在调用函数中使用该列表,该怎么办?那就是def fn_1():lst = [] lst.append(1)lst.append(2)返回lst和def fn_2():print(fn_1())顺序总是相同的,而不管是多少次或在哪里我曾经使用过fn_1()吗?

– MANU
16年11月25日在11:22

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

–sge
16-11-27在10:17

#2 楼

简而言之,是的,顺序被保留。在long中:

通常,以下定义将始终应用于列表之类的对象:

列表是元素的集合,这些元素可以包含重复的元素,并且具有定义的顺序,除非明确做出更改,否则通常不会更改。堆栈和队列都是列表的两种类型,它们为添加和删除元素(堆栈为LIFO,队列为FIFO)提供特定(通常是有限的)行为。列表是事物列表的实用表示。可以将字符串视为字符列表,因为顺序很重要("abc" != "bca"),并且肯定允许在字符串内容中重复("aaa"可以存在并且!= "a")。

一组元素的集合,这些元素不能包含重复项,并且具有不确定的顺序,该顺序可以随时间变化,也可以不随时间变化。集不代表事物列表,而是描述事物的某种选择的程度。集合的内部结构及其元素之间的相对存储方式通常并不意味着传达有用的信息。在某些实现中,集合始终在内部进行排序。在其他情况下,排序是完全不确定的(通常取决于哈希函数)。

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

这种命名方案适用于我所知道的所有编程语言,包括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"


评论


我在某处读到,因为JSON数组的规范未指定数组保持顺序,所以不能保证数组操作可以保持顺序。不过,我找不到来源。而且,数组的底层结构仍然是带有编号索引的对象的特殊情况,因此,我认为这与您的声明并不矛盾,只是一个有趣的花絮。

–多猎人
16 Dec 8'在21:09



我不同意set的说明。集合绝对不是“比现实生活更适合数学和理论目的”。相反,集在任何时候需要一个包含不能重复的项目的集合时都非常有用,并且提供了诸如差异和交集之类的工具,这些工具在对现实生活用例进行建模时很有用。

– Pintun
16 Dec 15'在15:05

@Pintun在写这篇文章后回顾了几年,我同意你的看法。一旦找到更好的表达方式,我将进行编辑。

–接近黑暗鱼
16 Dec 15 '22:59



#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 楼

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

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

mySet = {a, b, c, c}


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

myList = [a, b, c]


评论


请注意,集合还可以保证不重复。列表可能有重复的元素,集合可能没有。

–纳撒尼尔·福特(Nathaniel Ford)
15年11月20日在23:02

字典也使用大括号。

–最大
20/12/21在16:04

#5 楼

aList = [1,2,3]


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 楼

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

评论


除了Python 3:D

–mbeacom
18年4月27日在12:33