首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Python中同步实例列表到原始实例列表?

如何在Python中同步实例列表到原始实例列表?
EN

Stack Overflow用户
提问于 2019-05-24 02:04:48
回答 2查看 55关注 0票数 0

我有一个包含原始数据实例列表的数据管理器类。我还有一个GUI类,其中包含每个实例的GUI元素。当事件发生时,我需要将GUI列表与原始列表同步。

我觉得对此有一个更好、更优雅的解决方案,而不是遍历两个列表来添加()和删除()特定的实例。

编辑:示例案例如下

代码语言:javascript
复制
class Foo:
    def __init__(self, name='default'):
        self.name = name

    def __repr__(self):
        return self.name


a = Foo(name='a')
b = Foo(name='b')
c = Foo(name='c')
d = Foo(name='d')

l_original = [a, b]
l_synced = [a, b, c]

在这种情况下,我想要一个算法,确保l_synced与l_original 相同,而不需要设置l_synced = l_original。

EN

回答 2

Stack Overflow用户

发布于 2019-05-24 02:56:35

我会在GUI模型中留下一个对数据实例的引用。然后,当事件发生时,我会遍历所有图形用户界面实例,并使用它们对真实数据实例的引用在所述数据实例上调用相关的方法,如delete()modify()等。我还会传递对某种Factory()类的引用,该类可以创建数据模型的新实例到负责添加元素的图形用户界面元素。

票数 0
EN

Stack Overflow用户

发布于 2019-05-24 03:19:37

用于确保l_syncedl_original相同而不设置l_synced = l_original的示例。它使用append和remove。我希望它能帮助你。

代码语言:javascript
复制
class Foo:
    def __init__(self, name='default'):
        self.name = name

    def __repr__(self):
        return self.name


a = Foo(name='a')
b = Foo(name='b')
c = Foo(name='c')
d = Foo(name='d')

l_original = [a, b]
l_synced = [a, b, c]

print("Before")
print("Original: %s" % l_original)
print("Synced: %s" % l_synced)

for sync_obj in l_synced:
    if sync_obj in l_original:
        print("%s in l_original" % sync_obj)
    else:
        print("%s NOT in l_original. Remove it." % sync_obj)
        l_synced.remove(sync_obj)

for orig_obj in l_original:
    if orig_obj in l_synced:
        print("%s in l_synced" % orig_obj)
    else:
        print("%s NOT in l_synced. Append it." % orig_obj)
        l_synced.sppend(orig_obj)

print("After")
print("Original: %s" % l_original)
print("Synced: %s" % l_synced)

输出:

代码语言:javascript
复制
>>>python loop.py 
Before
Original: [a, b]
Synced: [a, b, c]
a in l_original
b in l_original
c NOT in l_original. Remove it.
a in l_synced
b in l_synced
After
Original: [a, b]
Synced: [a, b]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56280731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档