Python:遍历作为子类元组相关的元组

Python:遍历作为子类元组相关的元组,python,python-2.7,Python,Python 2.7,我有以下元组: ReadElement = namedtuple('ReadElement', 'address value size') LookupElement = namedtuple('LookupElement', ReadElement._fields[0:2] + ('lookups', ReadElement._fields[2])) 我想对它们进行如下迭代: mytuples = [ReadElement(1,2,3), LookupElement(1,2,3,4)] fo

我有以下元组:

ReadElement = namedtuple('ReadElement', 'address value size')
LookupElement = namedtuple('LookupElement', ReadElement._fields[0:2] + ('lookups', ReadElement._fields[2]))
我想对它们进行如下迭代:

mytuples = [ReadElement(1,2,3), LookupElement(1,2,3,4)]
for address, value, lookups?, size in mytuples
    if lookups is not None:
        addLookups(lookups)
    print address, value, lookups?, size

def addLookups(*items):
    return sum(items)
如何使用同一段代码迭代相似的元组

我想我要寻找的是两个命名元组的并集类型,所以该并集类型保留了循环中元组的顺序

从laike9m post中,我可以看到如何使用isinstance运算符,而不必在循环中解包元组,但是我希望避免对数据进行特殊的大小写,只需直接执行,而不需要任何if语句

如果这些是对象,我可以执行类似mytuples[0].execute()的操作,而不必担心它们是什么类型,只要它们是从同一父级生成的子类并实现了该方法即可


看来我的问题可能是下面的一个变体。在上述情况下,我只有两个项—一个子类和一个超类,它们彼此非常相似,因此也可以组成一个类。

首先,您的namedtuple定义错误,应该是:

LookupElement = namedtuple('LookupElement', ReadElement._fields[0:2] + ('lookups', ReadElement._fields[2]))
其次,你不必担心所有这些:

>>> for nt in mytuples:
    print(nt)


ReadElement(address=1, value=2, size=3)
LookupElement(address=1, value=2, lookups=3, size=4)
我要睡觉了,所以也许我不能回答你进一步的问题。我认为最好的方法是在使用它之前检查你想要的字段是否存在

我不知道你到底想要什么,以下是我要做的:

mytuples = [ReadElement(1,2,3), LookupElement(1,2,3,4)]
for nt in mytuples
    if 'lookups' in nt._fields:
        print nt.address, nt.value, nt.lookups, nt.size
    else:
        print nt.address, nt.value, nt.size

你的名字看起来不正确谢谢@Iaike9m我修正了答案以反映正确的LookupElement,我给出的打印示例只是一个简单的例子。如果我想对这些元组所需的数据执行某些操作,我将无法通过nt引用它们。我将在问题中添加一个示例来澄清这一点。我不认为python内置了类似的东西。它类似于BNF风格的语法思想,即规则可以由可能存在或不存在的标记表示(可选)。在这种情况下,它是(ReadElement和LookupElement)->地址、值、查找?的超集/联合属性?,size@HarPython在从函数获取返回值时也有类似的功能<代码>(ReadElement和LookupElement)->地址、值、查找?、大小是不可能的。但是你为什么需要这样的东西呢?如果您想要元组中的所有元素,您可以使用
列表(一些被命名的元组)
,如果您想要使用选定的元素,只需通过名称访问它们。由于这两种元组的操作是相似的,我想要一种连接它们的方法,并简化了操作,即只要有这种类型的元组,就不需要担心单独的命名。我想这是我想要的一种模式匹配。我认为您提供的解决方案是前进的方向,因为它没有内置语言,必须手工制作。