总而言之:我需要编写一个列表推导,其中我指的是由列表推导创建的列表。

这可能不是您每天都需要做的事情,但是我也不认为这很不寻常。

也许这里没有答案-仍然,请不要告诉我我应该使用for循环。可能是正确的,但没有帮助。原因是问题域:这行代码是ETL模块的一部分,因此性能至关重要,因此避免创建临时容器也很重要-因此,我希望在L/C中对此步骤进行编码。如果for循环在这里适合我,我将只编写一个。

无论如何,我无法写出这种特殊的列表理解。原因:我需要编写的表达式具有以下形式:

[ some_function(s) for s in raw_data if s not in this_list ]

在该伪代码中,“this_list”指的是通过评估列表理解而创建的列表。这就是为什么我会坚持下去的原因-因为在评估列表理解之前不会构建this_list,并且由于在我需要引用该列表时尚未构建此列表,所以我不知道如何引用它。

到目前为止,我已经考虑了什么(尽管可能不知道确切的位置,但这可能是基于一个或多个错误的假设):
  • 没有python解释器
    给出这份正在 build 中的 list
    一个名字?我觉得
  • 可能使用了临时名称
    从一些用于构建的绑定(bind)方法
    我的列表(“sum”?)
  • 但即使我麻烦到
    找到那个绑定(bind)方法并假设
    确实是临时名称
    python解释器用来
    在它下面的时候引用列表
    施工,我很确定你
    无法引用绑定(bind)方法
    直接地;我不知道这样的
    明确的规则,但那些方法(在
    至少我实际
    看着)不是有效的python
    句法。我猜原因之一
    这样我们就不会将它们写入
    我们的代码。

  • 这就是我所谓的推理的链条,它使我得出结论,或者至少是猜测,我已经将自己编码到一个角落。我仍然认为我应该在转身并朝不同的方向之前与社区进行验证。

    最佳答案

    曾经有一种方法可以利用未记录的事实来完成此任务,即在构建列表时,其值存储在名为_[1].__self__的局部变量中。但是,这在Python 2.7中就不再起作用了(也许是在更早的时候,我并没有密切注意)。

    如果先设置外部数据结构,则可以在单个列表理解中执行所需的操作。由于您所有的伪代码似乎都在使用this_list进行检查,以查看是否已存在每个s(即成员资格测试),因此我将其更改为名为setseen,以进行优化(在如果列表很大,list可能会非常慢)。这就是我的意思:

    raw_data = [c for c in 'abcdaebfc']
    
    seen = set()
    def some_function(s):
        seen.add(s)
        return s
    
    print [ some_function(s) for s in raw_data if s not in seen ]
    # ['a', 'b', 'c', 'd', 'e', 'f']
    

    如果您无权访问some_function,则可以在自己的包装函数中对其进行调用,该函数将其返回值添加到seen集中,然后再返回。

    即使这不是列表理解,我还是将整个内容封装在一个函数中,以使重用变得更容易:
    def some_function(s):
        # do something with or to 's'...
        return s
    
    def add_unique(function, data):
        result = []
        seen = set(result) # init to empty set
        for s in data:
            if s not in seen:
                t = function(s)
                result.append(t)
                seen.add(t)
        return result
    
    print add_unique(some_function, raw_data)
    # ['a', 'b', 'c', 'd', 'e', 'f']
    

    无论哪种情况,我都觉得很奇怪,您要引用的伪代码中构建的列表不是由raw_data值的子集组成,而是对每个值调用some_function的结果-即转换后的数据- -这自然使人怀疑some_function会做什么,以使其返回值可能与现有raw_data项的值匹配。

    关于python - 理解力: References to the Components,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5056297/

    10-14 14:25