import numpy as np
import re
def validate(seq):
stl = "".join(np.diff(seq).astype(str))
for x in re.findall("[1]+",stl):
if len(x)>3:
return False
return True
print validate([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 16, 20])
print validate([1, 2, 3, 6, 7, 8, 9, 11, 12, 16, 17, 18, 19, 22, 23])
print validate([2, 3, 5, 7, 9, 10, 11, 12, 14, 15, 17, 20, 22, 23, 24])
输出
False
True
True
此代码检查列表并检查链接的数量,如果第一次打印(1,2,3,4,5,6,7,...)的数量超过4,则返回False,返回如果第二次打印(6,7,8,9)(16,17,18,19)中只有4个顺序,则为真。
那么当列表中只有一个包含4个数字的组时,如何修改代码以返回True?对于序列中包含多于数字的列表,返回False?
print validate([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 16, 20])
print validate([1, 2, 3, 6, 7, 8, 9, 11, 12, 16, 17, 18, 19, 22, 23])
print validate([2, 3, 5, 7, 9, 10, 11, 12, 14, 15, 17, 20, 22, 23, 24])
输出
False
False
True
答案 0 :(得分:0)
您定义验证功能的方式有点难以理解。我用以下方式重写了它
def validate(seq, counts=1, N=4):
if len(seq) < N:
return False
diff_seq = np.diff(seq)
sum_seq = np.array([(np.sum(diff_seq[i:i+N-1])==N-1) for i in range(len(diff_seq)-N+2)])
return np.count_nonzero(sum_seq) == counts
其中N
是组中连续数字的长度,counts
是您希望在seq
中拥有的此类组的数量。
修改强>
您可以使用convolve在函数validate
中计算sum_seq,如下所示
sum_seq = np.convolve(diff_seq, np.ones((N-1,)), mode='valid') == N-1
这应该快得多,看起来更加pythonic。