枚举包含字符串和整数的子列表(python)

时间:2015-10-20 08:15:51

标签: python enumeration nested-lists

以下是我的清单示例。 我想枚举此列表中的每个嵌套列表,仍然能够以相同的格式打印列表列表。 在我枚举这些嵌套列表之后,我还想通过枚举进行索引,以便按编号搜索主列表。 这有可能吗?

weaponstore = [['Slingshot', 5, 20],['Leather Sandals', 5, 40],['Wooden Sword', 15, 100]]

我想列举列表' weaponstore'以后它会是:

weaponstore = [[0, 'Slingshot', 5, 20],[1,'Leather Sandals', 5, 40],[2,'Wooden Sword', 15, 100]]

4 个答案:

答案 0 :(得分:0)

使用理解和enumerate。 (创建一个新列表。)

[[i] + l for i, l in enumerate(weaponstore)]

或就地。 (修改武器库。)

for i, l in enumerate(weaponstore):
    l.insert(0, i)

答案 1 :(得分:0)

这个怎么样?使用python list comprehension。

>>> [[i] +j for i, j in enumerate(weaponstore)]
[[0, 'Slingshot', 5, 20], [1, 'Leather Sandals', 5, 40], [2, 'Wooden Sword', 15, 100]]

答案 2 :(得分:0)

在项目中存储项目索引没有任何好处。看起来您可能只想将武器商店打印为编号列表,以便用户可以更轻松地选择他们想要的那个。您不应该将索引放入每个项目中,而应该只显示它​​而不更改数据结构:

>>> weaponstore = [['Slingshot', 5, 20],['Leather Sandals', 5, 40],['Wooden Sword', 15, 100]]
>>> for idx,item in enumerate(weaponstore):
...     print('#{}: {}\nQuantity: {}\nCost: {}'.format(idx, *item))
...
#0: Slingshot
Quantity: 5
Cost: 20
#1: Leather Sandals
Quantity: 5
Cost: 40
#2: Wooden Sword
Quantity: 15
Cost: 100

这会在weaponstore上循环,并在每个项目上添加适当的索引。对于每个项目,它将打印一个格式化的字符串,将传递的参数插入到大括号中。

您可能希望使用.format(idx+1, ...而非idx,以便列表以更自然的1开头。然后,您可以从用户输入的任何数字中减去1,以确定他们想要的项目。

答案 3 :(得分:0)

如果您正在寻找从武器库中的武器库获取武器的方法,那么您应该查看一个词典:

weaponstore = {
    id1: ['Slingshot', 5, 20],
    id2: ['Leather Sandals', 5, 40],
    id3: ['Wooden Sword', 15, 100]
}

允许访问:

weaponstore[id1]   # once they know what the id is

现在你可以在原始列表中使用初始位置作为他们的id,但是这很脆弱,当你从商店添加/删除项目时容易破坏。 id可以是任何(可散列)对象,因此您可以使用武器名称作为其ID:

weaponstore = {
    'Slingshot: [5, 20],
    'Leather Sandals': [5, 40],
    'Wooden Sword': [15, 100]
}

现在可以访问:

weaponstore['Slingshot']

你可以更进一步,使细节也成为一个字典:

weaponstore = {
    'Slingshot',: {'quantity': 5, 'cost': 20},
    'Leather Sandals': {'quantity': 5, 'cost': 40},
    'Wooden Sword': {'quantity': 15, 'cost': 100}
}

weaponstore['Slingshot]['cost'] == 20

您可以遍历商店中的商品:

for weapon, details in weaponstore.items():
    print(weapon, details)

但很难从你的描述中了解你的需求