簡體   English   中英

如何在Python中創建類似PHP的列表?

[英]How do you create a list like PHP's in Python?

這是一個非常簡單的問題(我是Python的新手)。

我基本上想要一個像PHP數組這樣的數據結構-即,我想對其進行初始化,然后在其中添加值。

據我所知,這在Python中是不可能的,因此我已經有了想要用作索引的最大值,但是我不知道如何創建指定長度的空列表。

此外,列表是否是正確的數據結構,可用於建模應該只是數組的模型? 我嘗試使用數組,但是對存儲字符串似乎不滿意。

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

即,我希望能夠做到這一點:

list = []

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

根據您將如何使用列表,可能實際上是您想要一本字典。 這將起作用:

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開始的連續索引來訪問它們,則可以嘗試以下操作:

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

打印:

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

使用列表構造函數,並添加項,如下所示:

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

給我['foo', 3] ,這應該是您想要的。 請參閱清單中文檔序列類型文檔

編輯已更新

對於插入,請使用insert ,如下所示:

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

顯示['foo', 'new', 3]

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

您無需創建具有指定長度的空列表。 您只需添加到它們,然后根據需要查詢它們的當前長度。

如果不准備捕獲異常,您無法做的就是使用不存在的索引。 這可能是您在PHP中所習慣的。

您可以使用以下語法創建包含n元素的列表:

lst = [0] * n

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

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

然后,您可以訪問以下元素:

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

Python列表可與其他語言中的向量媲美。 它是可調整大小的數組,而不是鏈接列表。

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

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

1個

我同意ned的觀點,您可能需要一本字典來嘗試做。 但這是一種獲取這些類別列表的方法,您可以這樣做:

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

使用字典,因為您真正要的是可以通過任意鍵訪問的結構

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"

我不確定我是否理解您的意思或想要做什么,但是似乎您想要一個像字典一樣的列表,其中索引是關鍵。 即使我認為,使用字典式字典是一個更好的選擇,這是我的答案:有問題-創建一個對象:

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語法有一些錯誤(沒有檢查),但原則上應該可以。 當然,else的else情況也適用,但是我認為,以這種方式閱讀可能會有點困難。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM