pre_seq_list = [[17, 37, 38, 37, 38, 37, 38, 37], [17, 37, 38, 37, 38, 37, 37], [17, 37, 38, 37, 38, 38, 37],
[17, 37, 38, 37, 37, 38, 37, 37], [17, 37, 38, 37, 37, 38, ], [17, 37, 38, 37, 37, 38, 38, 37],
[17, 37, 38, 37, 37, 37, 37, 38, 37], [17, 37, 38, 37, 37, 37, 37, 37], [17, 37, 38, 37, 37, ],
[17, 37, 38, 37, 38, 37, 38, 37, 39], [17, 37, 38, 37, 37, 37, 37, 38, 37, 39]]
"""把列表组合按照大小排序"""
num_seq = len(pre_seq_list)
order_list = []
while len(order_list) < num_seq:
m = pre_seq_list[0]
k=0
for i in range(len(pre_seq_list)):
if len(pre_seq_list[i]) <= len(m):
m = pre_seq_list[i]
k = i
order_list.append(pre_seq_list[k])
del pre_seq_list[k]
# print(order_list)
"""定义函数判断l1是不是l2的子列表"""
def is_l1_in_l2(l1, l2): # 如果列表l1是列表l2的子序列,则返回1
cursor = 0 # 记录匹配到item条目的位置,下一个条目匹配从此位置开始
num_item = 0 # 记录匹配列表l1条目的值
for item in l1:
if cursor < len(l2):
for j in range(cursor, len(l2)):
if l2[j] == item:
cursor = j+1
num_item = num_item+1
break
if num_item == len(l1): # 如果能l1是l2的子序列,则返回true
return 1
else: # 返回false
return 0
while i < len(order_list):
for j in range(i+1, len(order_list)):
if is_l1_in_l2(order_list[i], order_list[j]):
del order_list[i]
break
i = i+1
print(len(order_list))
当然,以上代码只适合我的要求,项目要求[1,2,3]是[1,2,3,4] , [1,3,2,3,4,] , [1,1,2,,2,3,3,], [1,32,4,4,65,2,2,4,3]等列表的子序列列表。
接下来的代码才是实实在在的判断一个列表是另外一个列表的子列表:
def is_l1_in_l2(l1, l2): # 如果列表l1是列表l2的子序列,则返回1
flag = 0 # 如果匹配成功这置为1
for j in range(len(l2)):
child_list = l2[i:i+len(l1)] # 截取与l1等长的序列
if child_list == l1:
flag =1
break # 找到匹配项,则跳出循环,结束函数
return flag