【问题标题】:How to update a composite list as contents of member lists are changed?如何在成员列表内容更改时更新复合列表?
【发布时间】:2016-09-09 16:53:35
【问题描述】:

假设我有:

friendlies = []
enemies = []
everyone = [friendlies + enemies]

我说:

friendlies.append("something")

所以友谊现在包含:

["something"]

使everyone 也更新的pythonic 方法是什么?因此,如果我以上述方式更新friendlieseveryone 将包含:

["something"] 

?

【问题讨论】:

  • [friendlies + enemies] 这将返回[[..elements.....]]。你想要那个吗?

标签: python list python-3.x data-structures


【解决方案1】:

在复合列表中维护对friendliesenemies 的引用:

everyone = [friendlies, enemies]
#                     ^

compisite 列表的索引 0 和 1 将分别引用 friendliesenemies

friendlies + enemies 创建一个不是您想要的新列表。


一种更具可读性的方法是将everyone 制作成字典:

everyone = {'friendlies': friendlies, 'enemies': enemies}

并且可以用作:

>>> friendlies = []
>>> enemies = []
>>> everyone = {'friendlies': friendlies, 'enemies': enemies}
>>> friendlies.append("something")
>>> everyone['friendlies']
['something']

【讨论】:

  • 是否有另一种方法可以使用everyone 追加到两个列表friendlies, enemies 而无需迭代每个人并一次追加到列表中?
  • @MooingRawr 你能详细描述一下吗
  • 想做for each in everyone: each.append("something")还有其他方法吗?
  • @MooingRawr 其他方式即使不明显也会有底层迭代
【解决方案2】:

如果您现在求和,您将失去参考。创建列表列表以维护引用

这样做的黑客方式:

friendlies = []
enemies = []

everyone = [friendlies,enemies]  # not sum, sublists
enemies.append("something")
print(sum(everyone,[]))   # sum sublists to a new list

【讨论】:

  • 这不是和摩西发的一样吗?
  • 我想我现在爱上了sum,谢谢你.... 只需要找一份工作,让我和我的新情人在一起。
  • 正确:虽然只是一个 python 工作就可以了!下一个技巧:reduce。呃,没有。
猜你喜欢
  • 2019-05-17
  • 2023-04-11
  • 1970-01-01
  • 1970-01-01
  • 2021-04-01
  • 1970-01-01
  • 2016-11-02
  • 2016-05-30
  • 2019-01-19
相关资源
最近更新 更多