0

我有两个列表,其中一个是:

[a1, b1, [[c1, d1, e1], [f1, g1, h1], etc, etc], etc]

另一个是字典,其条目格式为:

[[a2, b2, c2], [d2, e2, f2], etc, etc].

我需要在那里比较这两个子列表的第一个条目,并找到任何相同的条目,以及第一个条目中根本没有出现在第二个条目中的条目。

例如,如果c1 = d2,我想知道,如果f1不等于a2or d2,我想知道。

无论如何,我在正确实施这一点时遇到了一些麻烦,任何帮助将不胜感激。

谢谢!

(我不确定列表格式的理解程度如何,如果它们仍然令人困惑,请见谅)

代码示例:

for row in range(0, len(command[2])):

    counter = 0

    for nodeRows in range(0, len(nodeTable[command[0]])):

        if nodeTable[command[0]][nodeRows][0] == command[2][row][0]:

            if ((command[2][row][2]) + 1) < nodeTable[command[0]][nodeRows][2]:

                counter += 1

                newrow = command[2][row]
                newrow[1] = command[1]
                newrow[2] = newrow[2] + 1

                nodeTable[command[0]][nodeRows] = newrow

                change = 'true'

我想这没有帮助。代码有点单一(这就是我最初没有发布它的原因)。但我基本上是在尝试比较两个值。另一个列表的第三个位置的列表中的项目的第一个值以及另一个列表中包含的列表中的项目的第一个值。

嗯……对不起。我试过让代码更简单,但有点复杂。

4

2 回答 2

3

我不确定我是否正确理解您的问题,但我会试一试。我想您只需要比较 3 个元素的每个子列表的第一个元素。

因此,首先我将所有第一个元素分开,然后进行比较。

这是带有一些doctest的代码,因此您可以检查它是否符合您的要求:

def compare(l0, l1):
    """
    >>> l0 = [1, 2, [[10, 20, 30], [40, 50, 60], [70, 80, 90]], 3]
    >>> l1 = [[11, 21, 31], [41, 51, 61], [71, 81, 91]]
    >>> compare(l0, l1)
    ([], [10, 40, 70])

    >>> l0 = [1, 2, [[10, 20, 30], [40, 50, 60], [70, 80, 90]], 3]
    >>> l1 = [[10, 21, 31], [41, 51, 61], [71, 81, 91]]
    >>> compare(l0, l1)
    ([10], [40, 70])

    >>> l0 = [1, 2, [[10, 20, 30], [40, 50, 60], [70, 80, 90]], 3]
    >>> l1 = [[10, 21, 31], [40, 51, 61], [70, 81, 91]]
    >>> compare(l0, l1)
    ([10, 40, 70], [])
    """
    first_entries_l0 = [x[0] for x in l0[2]]
    first_entries_l1 = [x[0] for x in l1]

    equals = [x for x in first_entries_l0 if x in first_entries_l1]
    unique = [x for x in first_entries_l0 if x not in first_entries_l1]

    return equals, unique

要测试代码,只需将其复制到文件“code.py”并运行它:

python -m doctest code.py

您可以只使用一次集合和循环来提高效率,但我什至不确定这是否能解决您的问题,所以我将把它留给您。

于 2012-11-06T22:45:48.307 回答
1

答案是:将您当前的数据结构转换为适当的数据结构。大概输入是你自己定义的,所以你不应该写更好的代码来处理丑陋的结构,而是改进结构。如果您正在编写一个糟糕的 API,请将 API 映射到一个有用的结构。

您必须发布整个代码才能获得正确的答案,因为问题出在定义中。我猜你将不得不重构整个模块并重新开始,因为这只是糟糕的代码。

一些想法:命令可以是一棵树吗?排队名单?矩阵?一类?为什么item的长度不一样,为什么要比较不同的subitem?尝试使用类并覆盖__cmp__.

于 2012-11-06T22:33:32.013 回答