我想知道是否有更好的方法来编写以下代码:
我想在三个列表中查找组合,a
,b
,c
,每个a[i]
,b[j]
,c[k]
长度大于10,然后返回总长度。有没有更好的编码方法?你知道吗
from collections import namedtuple
a = ['a0', 'a1', 'a22']
b = ['b', 'b11111', 'b2']
c = ['', 'c', 'c333333333']
def func(**kwargs):
nt = namedtuple('nt', ['a', 'b', 'c'])
for x in kwargs['a']:
for y in kwargs['b']:
for z in kwargs['c']:
if len(x) >= len(y) >= len(z) > 10:
return nt(a_header=x, b_header=y, c_header=c, all_len=len(x) + len(y) + len(z))
return ()
# it should return len('a22') + len('b11111') + len('c333')
如果
len(z) = 15
和len(y)=13
,您的代码可能会失败,例如,因为您需要len(x) >= len(y) >= len(z) > 10
。相反,请尝试:如果你想
that each a[i], b[j], c[k] length larger than 10
。。。你知道吗不要使用嵌套for循环。你知道吗
而是分别检查每个列表(
kwargs['a']
,然后kwargs['b']
,然后kwargs['c']
),并找到长度大于10的所有元素(元素的位置)。复杂性是O(n)
,其中n
是所有列表的总长度。你知道吗最后逐一计算所有可能的和或产生的和。你知道吗
使用itertools.产品我们可以为每个列表创建一个项目的所有3种方式组合。我们可以从这个产品列表中选取这些产品,并将它们过滤到只有那些分别具有
lens >= (3, 6, 10)
"i want 3 >= 6 >= 10" - OP
的产品。你知道吗或者对于单行解决方案使用列表理解
相关问题 更多 >
编程相关推荐