如何做到这一点?我的意思是,这是对矩阵的某种搜索。我需要在main_matrix上搜索search_matrix。特殊规则是:如果search_matrix包含在main_matrix的开头4个元素中,则它可以是输出。我的意思是,如果search_matrix不在main_matrix的开头(4个元素(,它就不可能是output_trix中的。元素顺序是最重要的。元素必须有序。
main_matrix =
[['AAA', 'bbb', 'ccc'],
['ccc', 'AAA', 'bbb'],
['DDD', 'AAA', 'fff', 'ccc', 'hhhh', 'iii'],
['JJJ', 'kkk', 'lll', 'mmm', 'nnn', 'ooo'],
['PPP', 'qqq', 'rrr', 'sss', 'tttt', 'yyy'],
['mmm', 'kkk'],
['bbb', 'zzz', 'sss']]
['kkk', 'qqq', 'rrr', 'mmm', 'ttt', 'yyyyyy'],
['PPP', 'qqq', 'rrr', 'mmm', 'ttt', 'yyy'],
['zzz', 'zzzz', 'zzz', 'zzz', 'AAA', 'ccc']]
search_matrix=
[['AAA', 'ccc'],
['bbb', 'ccc'],
['kkk', 'mmm'],
['PPP','qqq', 'rrr']]
所需输出为:
output_matrix =
[['AAA', 'bbb', 'ccc'],
['DDD', 'AAA', 'fff', 'ccc', 'hhh', 'iii'],
['AAA', 'bbb', 'ccc'],
['JJJ', 'kkk', 'lll', 'mmm', 'nnn', 'ooo'],
['kkk', 'qqq', 'rrr', 'mmm', 'ttt', 'yyy'],
['PPP', 'qqq', 'rrr', 'sss', 'ttt', 'yyy']]
请帮帮我?
更新:
我们能在最后三个元素上做吗?
main_matrix = [
['AAA', 'bbb', 'ccc'],
['ccc', 'AAA', 'bbb'],
['DDD', 'AAA', 'fff', 'ccc', 'hhh', 'iii'],
['JJJ', 'kkk', 'lll', 'mmm', 'nnn', 'ooo'],
['PPP', 'qqq', 'rrr', 'sss', 'ttt', 'yyy'],
['mmm', 'kkk'],
['bbb', 'zzz', 'sss'],
['kkk', 'qqq', 'rrr', 'mmm', 'ttt', 'yyy'],
['PPP', 'qqq', 'rrr', 'mmm', 'ttt', 'yyy'],
['zzz', 'zzz', 'zzz', 'zzz', 'AAA', 'ccc']
]
search_matrix = [
['AAA', 'ccc'],
['bbb', 'ccc'],
['kkk', 'mmm'],
['PPP', 'qqq', 'rrr']
]
output_matrix = []
def s(search, it):
indices = []
for el in search:
if el in it:
indices.append(it.index(el))
else:
return False
if indices != sorted(indices):
return False
return True
for foo in search_matrix:
for bar in main_matrix:
if s(foo, bar[:4]):
output_matrix.append(bar)
我想我得到了,给出输出
[['AAA', 'bbb', 'ccc'], ['DDD', 'AAA', 'fff', 'ccc', 'hhh', 'iii'], ['AAA', 'bbb', 'ccc'], ['JJJ', 'kkk', 'lll', 'mmm', 'nnn', 'ooo'], ['kkk', 'qqq', 'rrr', 'mmm', 'ttt', 'yyy'], ['PPP', 'qqq', 'rrr', 'sss', 'ttt', 'yyy'], ['PPP', 'qqq', 'rrr', 'mmm', 'ttt', 'yyy']]
我不知道这是一个解决方案,但我只想明白:这就是你想要的结果吗?
from itertools import combinations
for row in main_matrix:
for search_row in search_matrix:
search_row = tuple(search_row)
for combo in combinations(row[:4], len(search_row)):
if combo == search_row:
print(row, "includes", combo)
打印:
['AAA', 'bbb', 'ccc'] includes ('AAA', 'ccc')
['AAA', 'bbb', 'ccc'] includes ('bbb', 'ccc')
['DDD', 'AAA', 'fff', 'ccc', 'hhh', 'iii'] includes ('AAA', 'ccc')
['JJJ', 'kkk', 'lll', 'mmm', 'nnn', 'ooo'] includes ('kkk', 'mmm')
['PPP', 'qqq', 'rrr', 'sss', 'ttt', 'yyy'] includes ('PPP', 'qqq', 'rrr')
['kkk', 'qqq', 'rrr', 'mmm', 'ttt', 'yyy'] includes ('kkk', 'mmm')
['PPP', 'qqq', 'rrr', 'mmm', 'ttt', 'yyy'] includes ('PPP', 'qqq', 'rrr')
['PPP', 'qqq', 'rrr', 'mmm', 'AAA', 'ccc'] includes ('PPP', 'qqq', 'rrr')
但这并不是你所要求的?