[英]For loop or Lambda function?
我有这两个代码,它们(现在只有第一个)应该返回我重复的序列长度(13, 6, 6, 14, 6 AND 13, 6, 6, 14, 6):
l = [13, 6, 6, 14, 6, 13, 6, 6, 14, 6]
def count_period(l):
l_max = int((len(l)/2)+1)
for i in range(2, l_max):
interval1 = l[0:i]
intervallo2 = l[i:2*i]
if interval1 == interval2:
return i
和:
l = [13, 6, 6, 14, 6, 13, 6, 6, 14, 6]
l_max = int((len(l)/2)+1)
period_value= next(filter(lambda x: [l[0:x] == l[x:2*x] in range(2, l_max)], l), None)
为什么第一个代码返回正确的值 (5) 而第二个返回我 13? 我做错了什么? 关于这个主题:因为从一般的角度来看我是 Python 的新手(而不是关于这种情况),我如何知道我应该遵循哪条路径来获得好的代码(执行时间短,圈复杂度低)? 例如在这种情况下(让我们假设我还没有写任何东西),我应该遵循这两种方式(或另一种方式)中的哪一种? 谢谢!
您应该过滤range(2, l_max)
而不是l
以将您的代码从顶部转换为过滤器。 现在,对于l
每个值,您正在定义要使用的过滤器的谓词 lamdba 中创建一个列表。 如果该列表中有项目,则返回true
,只有空列表会返回false
。 然后,如果过滤器通过谓词,则过滤器决定保留值x
,否则将其丢弃。 因此,它保留原始列表中的所有项目,该列表中的next
是 13。您应该这样做:
l = [13, 6, 6, 14, 6, 13, 6, 6, 14, 6]
l_max = int((len(l)/2)+1)
period_value= next(filter(lambda x: l[0:x] == l[x:2*x], range(2, l_max)), None)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.