如何通过python在矩阵(列表)中按顺序搜索单词



如何做到这一点?我的意思是,这是对矩阵的某种搜索。我需要在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')

但这并不是你所要求的?

最新更新