【问题标题】:Python Apply Partial Lambda to List of TuplesPython 将部分 Lambda 应用于元组列表
【发布时间】:2017-11-29 02:48:04
【问题描述】:

我有一个元组列表,每个元组大约有 20 个元素。基本数据结构如下:

data[1]
>>('3824813',
    '310202',
    'AEOIME',
    'UEJNAJ',
    ...
    )

其中一些元组包含未定义的字符串,在这种情况下,我想排除包含的元组。所以我使用了filter 之类的:

data2 = list(filter(lambda t: '' not in t, data))

现在事情稍微复杂了一点,因为我现在了解到元组的第 15 个元素仍应保留,即使它是空白的。

我的问题是:如果在除第 15 个元素之外的任何元素中包含 '' 的所有元组,我如何编写一个过滤器来排除列表中的所有元组?

我唯一能想到的就是做一个单独的过滤器来找到第 15 个空元素,然后在我进行大量过滤后将它们组合回来。对我来说,这似乎过于hacky,但这只是我。不管怎样,让我知道什么在这里会很好用,谢谢。

【问题讨论】:

    标签: python-3.x lambda


    【解决方案1】:

    您可以做的一件事是编写这样的过滤器函数:

    def keepTuple(tpl):
        for idx, string in enumerate(tpl):
           if idx == 14 and string == "":
               continue
           elif string == "":
               return False
        return True
    

    那么,如果我正确理解您的问题,您应该可以使用它来过滤您的列表:

    data2 = list(filter(keepTuple, data))
    

    不过,我不太了解您的数据。你能有 more 多于第 15 个元素为空的元组,还是元组中只能有一个字符串为空?

    【讨论】:

    • 第 15 个以上的元素可能为空
    • 所以,如果除了第15个元素是空的,那么你拒绝,但是如果only第15个元素是空的(或者没有元素是空的),那你留着呢?
    • 是的,没错,如果只有第 15 个元素是空的,那么我想保留那个元组(否则我拒绝)。顺便说一句,好主意!
    • 我一直在做一些诊断,出于某种奇怪的原因,有一些包含空元素的元组仍在通过。即,抛出的第一个错误是列表的第 69 项。在这个元组上,第二个索引(也就是第三个元素)是空的。我的data2[i][2] == '' if 语句被触发,我使用print() 检索详细信息。但这没有意义,您的功能似乎应该可以工作。
    • 可能发生的是第 15 个元素 第二个元素都是空的。但即便如此,该函数也能正确处理,对吧?我很困惑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-03
    • 2021-03-31
    • 2021-03-21
    • 1970-01-01
    • 1970-01-01
    • 2011-01-15
    相关资源
    最近更新 更多