2012-12-04 52 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

是列表和元組總是有序的,而字典是不是

相關問題