你如何在Python中创建像PHP一样的列表?

时间:2009-01-13 12:42:34

标签: python list

这是一个非常简单的问题(我是Python的新手)。

我基本上想要一个像PHP数组一样的数据结构 - 也就是说,我想初始化它然后只是在其中添加值。

据我所知,这不可能用Python,所以我得到了我可能想用作索引的最大值,但我无法弄清楚如何创建一个指定的空列表长度。

此外,列表是一个正确的数据结构,用于模拟它应该只是一个数组?我试图使用一个数组,但它似乎对存储字符串感到不满。

编辑:对不起,我没有清楚地解释我在寻找什么。当我将项目添加到列表中时,我不想按顺序将它们放入,而是希望将它们插入到列表中的指定插槽中。

即,我希望能够做到这一点:

list = []

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

9 个答案:

答案 0 :(得分: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 dicts,而不像Python列表。例如,它们可以包含键的字符串。

令人困惑的是,Python有一个数组模块,它被描述为“有效的数值数组”,这绝对不是你想要的。

答案 1 :(得分: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]

答案 2 :(得分: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]

答案 3 :(得分:2)

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

您无需创建具有指定长度的空列表。您只需添加它们并根据需要查询其当前长度。

如果不准备捕获异常,你不能做的就是使用不存在的索引。这可能是你在PHP中习惯的。

答案 4 :(得分:1)

您可以使用此语法创建包含n元素的列表:

lst = [0] * n

但要小心!该列表将包含此对象的n个副本。如果此对象是可变的并且您更改了一个元素,那么所有副本都将被更改!在这种情况下,您应该使用:

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

然后你可以访问这些元素:

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

Python列表与其他语言中的矢量相当。它是一个可调整大小的数组,而不是链表。

答案 5 :(得分:1)

如果你想插入指定的索引,听起来你需要的可能是字典而不是数组。

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

1

  

答案 6 :(得分:1)

我同意你可能需要一本字典来表达你想要做的事情。但是这里有一种方法可以获得这些类别列表的列表:

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

答案 7 :(得分: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"

答案 8 :(得分:1)

我不确定我是否明白你的意思或想做什么,但似乎你想要一个清单 在指数是关键的地方是dictonary-like。即使我认为,使用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,但我想,这可能会有点困难  这样读。