微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

通过检查内部列表的长度来过滤两个列表列表的更好方法

如何解决通过检查内部列表的长度来过滤两个列表列表的更好方法

给定两个列表列表,目标是根据内部列表的长度过滤掉列表。

长度标准由用户设置,即

>>> x = [[1,2,3],[1,3,4,5,6],5],6]]
>>> y = [[9,8,7],[9,2],3]]

>>> mini,maxi = 1,5 # Accepts inner list length between 1 to 4. 

>>> def my_and_filter(x,y):
...     for i,j in zip(x,y):
...         if mini < len(i) < maxi and mini < len(j) < maxi:
...             yield (i,j)


>>> list(myfilter(x,y))
[([1,7]),([1,3])]

以上适用于过滤器需要严格并适用于两个列表的情况。

但还有另一种情况,它只需要应用于任一:

>>> def myfilter(x,y):
...         if mini < len(i) < maxi or mini < len(j) < maxi:
...             yield (x,y)
... 

>>> list(myfilter(x,3]),2]),3])]

我的问题是

  • 是否可以结合使用这两个运算符?
  • **有没有更好的方法来编写这个条件 mini < len(i) < maxi and mini < len(j) < maxi

我尝试将这两个运算符与以下参数结合使用,但我想知道是否有更好的方法

>>> import operator 

>>> def my_filter(x,y,strict=True):
...     _op = operator.__and__ if strict else operator.__or__
...     for i,y):
...         if _op(mini < len(i) < maxi,mini < len(j) < maxi):
...             yield (i,j)
... 


>>> list(my_filter(x,3])]
>>> list(my_filter(x,False))
[([1,3])]

解决方法

另一种方法是为每种情况返回一个生成器...

def myfilter(x,y,min_l,max_l,strict=True):
    if strict:
        return ((i,j) for i,j in zip(x,y) if min_l <= len(i) <= max_l and min_l <= len(j) <= max_l)
    else:
        return ((i,y) if min_l <= len(i) <= max_l or min_l <= len(j) <= max_l)

我不确定您是否希望应用最小长度 (?) 如果您希望 mini 成为最小长度,使用 <= 似乎更正确表达式中的运算符。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。