繁体   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