Python列表字符串与二维矩阵子串匹配问题的求解求助
代码修改方案
你原来的核心逻辑错误是判断方向搞反了,你已经完成了「删除l3中所有字符串的空格」这一步,接下来只需要判断去空格后的字符串是否包含l1中任意一个元素作为子串即可,不需要多余的split操作。
修改后的完整代码
l1 = ['phone','bag','name','after'] l2 = [ ['phoneedjf','jshph o n ejsh','pho ne'], ['ffaf terekdl','a hf ter','fd af t e rls'], ['name s', 'ram es','her na me is'], ['ba gg in g','ba g pa ck','b a g'], ['bo ok s','sksjbooksjfl','b o o k kfs ifh'] ] import numpy.core.defchararray as np_f # 去掉所有字符串中的空格 new_data = np_f.replace(l2, ' ', '') # 逐行逐元素判断是否包含l1中的任意子串 output = [] for row in new_data: new_row = [any(key in element for key in l1) for element in row] output.append(new_row) # 打印结果 for line in output: print(line)
运行输出
[True, True, True] [True, False, True] [True, False, True] [True, True, True] [False, False, False]
完全符合你的预期输出要求。
原代码错误说明
- 原代码中判断逻辑错误:你写的
any(value in l1 and ' ' not in element for value in element.split())是在判断当前字符串拆分后的片段是否存在于l1中,而不是判断l1的元素是否是当前字符串的子串 - 你已经提前把所有空格都删除了,后续不需要再做split、也不需要判断空格是否存在,属于冗余操作
- 第二段错误代码的问题是你遍历的对象搞反了,把列表
l3当成字符串调用了split方法,才会抛出属性错误。
内容的提问来源于stack exchange,提问作者Soheila
相关产品推荐
相关产品推荐

