2012-12-04 333 views

回答

287

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

+10

这是一个正确的答案,所以我不希望添加另一个。他也可以使用list.append来让他放心。 http://docs.python.org/2/tutorial/datastructures.html –

+0

如果我从函数返回一个本地列表并在调用函数中使用它,该怎么办?这就是'def fn_1():lst = [] lst.append(1)lst.append(2)return lst'和'def fn_2():print(fn_1())'顺序是否相同总是不管很多次或在哪里我使用fn_1()? – MANU

+1

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

55

总之,是的,订单被保留。在长:

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

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

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

Collection是一个通用术语,指的是用于存储(通常是可变数量)其他对象的任何对象。列表和集都是一种集合。元组和阵列通常不被认为是集合。有些语言认为地图(描述不同对象之间关联的容器)也是一种集合类型。这个命名方案适用于我所知的所有编程语言,包括Python,C++,Java,C#和Lisp(其中列表不保持其顺序将特别具有灾难性)。如果有人知道哪里不是这种情况,请说出来,然后我编辑我的答案。请注意,特定的实现可能使用其他名称的这些对象,如vector C++中的flex在ALGOL 68(这两个列表中; 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" 
+0

我读到的地方,因为JSON数组的规范没有指定数组维护秩序数组操作不保证顺序。不过,我找不到这个来源。 而数组的底层结构仍然是一个带有编号索引的对象的特例,所以这与您的陈述并不矛盾,只是一个有趣的小知识,我想。 – Multihunter

+0

我不同意集合的解释。套件绝对不是“更多地面向数学和理论目的而非真实世界”。相反,只要需要包含无法重复的项目的集合,集合就非常有用,并提供了对建模实际用例有用的差异和交叉等工具。 – Pintun

+1

@Pintun在写这篇文章几年后回头看,我同意你的看法。一旦我找出一个更好的方式来表达我的目标,我会进行编辑。 – ApproachingDarknessFish

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。要看到不同之处,请在将任何内容添加到x之前尝试设置y = x并尝试每一个,然后查看两者对y的区别。

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] 
4

你在混淆'套件'和'列表'。一套不保证顺序,但列表做。

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

mySet = {a, b, c, c} 

不保证顺序,但名单做:

myList = [a, b, c] 
+1

请注意,set *也*保证非重复。一个列表可能有重复的元素,一个集合可能不会。 –

0

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

相关问题