有没有办法从python中的不同列表中提取相应项?

时间:2018-07-23 17:25:48

标签: python indexing data-structures

我正在尝试创建一个程序,该程序将在桌面RPG中跟踪您的聚会及其健康状况。到目前为止,我能想到的最好的方法是有两个单独的列表,一个与党员成员列表,一个与他们的健康状况列表,以便在显示聚会时,它将运行类似于以下内容的代码:

for Member in Party:
    print(str(Member) + ":", str(Health), "HP")

是否可以从不同列表中为每个成员拉出相应的HP?

2 个答案:

答案 0 :(得分:1)

如果重要的是要拥有两个不同的列表,并且这些列表的顺序都相同(聚会成员列表的第一个元素与hp列表的第一个元素相对应),则可以压缩两个列表并对其进行迭代同时。

但是,如果要修改列表的元素,则可以枚举它们,从而允许您在遍历两个列表时跟踪索引,然后在循环中按索引修改列表。 / p>

vfunction = np.vectorize(function)
matrix = vfunction(a, b, c) # Doesn't work

但是,我建议您创建一个dict,它的数据结构与使用两个列表不同,但是使用起来要优雅得多。

for i, (member, hp) in enumerate(zip(members, hitpoints)):
    print(member, hp)
    if member == 'Bob':
        hitpoints[i] -= 10

对于更高级的用法(我仅表示非常轻微),您可以使用json模块将这些数据读写到文本文件中,以在多个会话中持久保存。

答案 1 :(得分:0)

在评论部分,我将两种建议结合使用。在这里使用OOP似乎是最佳选择,因此,下面是一个简短的示例

class Party(dict):
  def add_member(self,member):
    self[member.name] = member.hp

  def party_hp(self):
    total_hp = 0
    for name,hp in self.items():
      total_hp += hp
    return total_hp

class Member():
  def __init__(self, name, hp):
    self.name = name
    self.hp = hp

player1 = Member("player1",10)
player2 = Member("player2",10)
player3 = Member("player3",10)
player4 = Member("player4",10)

test_party = Party()
test_party.add_member(player1)
test_party.add_member(player2)
test_party.add_member(player3)
test_party.add_member(player4)

print(test_party.party_hp())
>>>> 40

请注意,这只是为了说明OOP如何成为真正可行的解决方案。基本上,在我的示例中,您有一个Party类,该类包含一个成员字典。呼叫party_hp即可返回聚会的总血量。

确切的实现可以完全不同。例如,您可以接受用户列表,以缩短向Party添加成员时所需的代码行数。同样,这是您可以使用的骨架。