[英]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]
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.