2009-01-13 21 views
1

這是一個令人難以置信的簡單問題(我是Python新手)。如何在Python中創建像PHP一樣的列表?

我基本上想要一個像PHP數組一樣的數據結構 - 也就是說,我想初始化它,然後在其中添加值。

據我所知,這是不可能與Python,所以我有我可能想用作索引的最大值,但我無法弄清楚如何創建一個空的列表指定長度。

此外,是一個正確的數據結構,用來模擬什麼感覺應該只是一個數組?我試圖使用一個數組,但它似乎不喜歡存儲字符串。

編輯:對不起,我沒有很清楚地解釋我在找什麼。當我將項目添加到列表中時,我不想按順序放入它們,而是想將它們插入列表中的指定插槽。

也就是說,我希望能夠做到這一點:

list = [] 

for row in rows: 
    c = list_of_categories.index(row["id"]) 
    print c 
    list[c] = row["name"] 
+0

是的,這聽起來像一個稀疏的數組而不是一個列表(列表沒有孔,備用數組)。因此,Ned使用字典的建議似乎是合理的,因爲如果我正確地記得那是php數組的實現方式。 – 2009-01-13 14:03:31

回答

10

根據你將如何使用列表,它可能是你真的想要一本字典。這將工作:

d = {} 

for row in rows: 
    c = list_of_categories.index(row["id"]) 
    print c 
    d[c] = row["name"] 

...或更簡潔:

d = dict((list_of_categories.index(row['id']), row['name']) for row in rows) 
print d 

PHP陣列更像Python的類型的字典比他們像Python列表。例如,他們可以有鍵的字符串。

令人困惑的是,Python有一個數組模塊,它被描述爲「有效的數值數組」,這絕對不是你想要的。

+0

如果你想通過行名索引分類列表,然後做:d [row [「name」]] = c – PEZ 2009-01-13 13:20:32

2

使用列表構造,和追加的項目,如:

l = list() 
l.append ("foo") 
l.append (3) 
print (l) 

給我['foo', 3],它應該是什麼你要。請參閱documentation on listsequence type documentation

編輯更新

插入,使用insert,像這樣:

l = list() 
l.append ("foo") 
l.append (3) 
l.insert (1, "new") 
print (l) 

它打印['foo', 'new', 3]

+0

對不起:我沒有真正解釋我需要什麼。我不想附加項目,而是將它們插入到數組中的指定插槽中。我爲我的問題添加了更多細節。 – Ben 2009-01-13 12:53:10

1

您可以使用此語法來創建一個列表與n元素:

lst = [0] * n 

但要小心!該列表將包含此對象的n副本。如果這個對象是可變的,並且你改變了一個元素,那麼所有的副本都將被改變!在這種情況下,你應該使用:

lst = [some_object() for i in xrange(n)] 

然後你就可以訪問這些元素:

for i in xrange(n): 
    lst[i] += 1 

Python列表相當於其他語言的載體。它是一個可調整大小的數組,而不是鏈接列表。

2

http://diveintopython3.ep.io/native-datatypes.html#lists

你並不需要用指定的長度創建空列表。您只需添加它們並根據需要查詢它們的當前長度。

沒有準備捕捉異常,你無法做的事就是使用一個不存在的索引。這可能是你在PHP中習慣的。

+0

確切地說 - 不存在的索引是我真正的問題。 – Ben 2009-01-13 12:53:46

4

如果基於0你想提前知道,並要使用整數,訪問這些項目的數量,連續指數,你可以試試這個:

n = 3 
array = n * [None] 
print array 
array[2] = 11 
array[1] = 47 
array[0] = 42 
print array 

此打印:

[None, None, None] 
[42, 47, 11] 
1

聽起來像你需要的可能是字典而不是數組,如果你想插入指定的索引。

dict = {'a': 1, 'b': 2, 'c': 3} 
dict['a'] 
1

我與斯內德同意,你可能需要一個字典,你正在試圖做什麼。但這裏有一個方法來獲得類別的列表的列表,你可以這樣做:

lst = [list_of_categories.index(row["id"]) for row in rows] 
1

使用字典,因爲你實際上要求的是,你可以按任意鍵訪問結構

list = {} 

for row in rows: 
    c = list_of_categories.index(row["id"]) 
    print c 
    list[c] = row["name"] 

然後你就可以通過與已知的內容重複:

for x in list.values(): 
    print x 

或檢查在「名單」存在的東西:

if 3 in list: 
    print "it's there" 
1

我不知道我是否理解你的意思或想要做什麼,但似乎你想要一個列表,其中 是索引是關鍵詞。即使我想,一個dictonary的使用將是一個更好 的選擇,這裏是我的答案是:有一個問題 - 讓一個對象:

class MyList(UserList.UserList): 

NO_ITEM = 'noitem' 

def insertAt(self, item, index): 

    length = len(self) 
    if index < length: 
     self[index] = item 
    elif index == length: 
     self.append(item) 
    else: 
     for i in range(0, index-length): 
      self.append(self.NO_ITEM) 
     self.append(item) 

也許有些錯誤在Python語法(沒有檢查)但原則上它應該工作。 當然,其他情況也適用於elif,但我想,這可能會更難 這樣讀取。

相關問題