这是一个非常简单的问题(我是Python的新手)。
我基本上想要一个像PHP数组一样的数据结构 - 也就是说,我想初始化它然后只是在其中添加值。
据我所知,这不可能用Python,所以我得到了我可能想用作索引的最大值,但我无法弄清楚如何创建一个指定的空列表长度。
此外,列表是一个正确的数据结构,用于模拟它应该只是一个数组?我试图使用一个数组,但它似乎对存储字符串感到不满。
编辑:对不起,我没有清楚地解释我在寻找什么。当我将项目添加到列表中时,我不想按顺序将它们放入,而是希望将它们插入到列表中的指定插槽中。
即,我希望能够做到这一点:
list = []
for row in rows:
c = list_of_categories.index(row["id"])
print c
list[c] = row["name"]
答案 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 list和sequence 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,但我想,这可能会有点困难 这样读。