如何解决通过检查内部列表的长度来过滤两个列表列表的更好方法
给定两个列表列表,目标是根据内部列表的长度过滤掉列表。
长度标准由用户设置,即
>>> 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 举报,一经查实,本站将立刻删除。