我想知道是否有更好的方式编写与以下代码相同的代码:
我想在a
,b
,c
这三个列表中寻找组合,每个a[i]
,b[j]
,{{1 }}长度大于10,然后返回总长度。有没有更好的方法来编写此代码?
c[k]
答案 0 :(得分:0)
例如,len(z) = 15
和len(y)=13
可能会导致您的代码失败,因为您需要len(x) >= len(y) >= len(z) > 10
。而是尝试:
def func(**kwarg):
nt = namedtuple('nt', ['a', 'b', 'c'])
for x in kwargs['a']:
for y in kwargs['b']:
for z in kwargs['c']:
if len(x) > 10 and len(y) > 10 and len(z) > 10:
return nt(a_header=x, b_header=y, c_header=c, all_len=len(x) + len(y) + len(z))
return ()
答案 1 :(得分:0)
如果您想要that each a[i], b[j], c[k] length larger than 10
...
不要使用嵌套的for循环。
取而代之的是分别检查每个列表(kwargs['a']
,然后是kwargs['b']
,然后是kwargs['c']
),然后找到长度大于10的所有元素(元素的位置)。复杂度为{{ 1}},其中O(n)
是所有列表的总长度。
最后一一计算所有可能的总和或收益总和。
答案 2 :(得分:0)
使用 itertools.product 我们可以为每个列表创建一项的所有3种方式组合。我们可以获取这些产品列表,并将其过滤为仅包含lens >= (3, 6, 10)
和 "i want 3 >= 6 >= 10" - OP
的产品。
from itertools import combinations
lista = [(x, y, z) for x, y, z in product(a, b, c)]
res = list(filter(lambda x: len(x[0]) >= 3 and len(x[1]) >= 6 and len(x[2]) >= 10, l))
print(*res)
或对于一线解决方案使用列表理解
res = [(u, v, w) for u, v, w in product(a, b, c) if len(u) >= 3 and len(v) >= 6 and len(w) >= 10]
('a22', 'b11111', 'c333333333')