我正在尝试获取一段代码,以返回在列表中找到匹配项的索引,以便可以将另一个项目与此索引进行比较。 (基本上允许将两个单独的字符串与列表中的同一项目进行比较)。如果完全匹配,我就能得到匹配,但不能使它与部分字符串一起使用。这是一些伪代码来显示我的身份:
mylist = ['abc', 'def', 'ghi', 'jkl', 'mno']
str1 = 'does mn have anything to do with it?'
str2 = 'I think mn is there'
b = [i for i, s in enumerate(mylist) if str1 in s]
print(b)
所以我的问题是如何获取返回的'mno'索引,以便在第一次检查后可以将str2与之比较。如果有更好的方法可以解决这个问题,请爱听它
答案 0 :(得分:1)
这样吧:
b = []
for i in str1.split():
for idx, j in enumerate(mylist):
if i in j:
b.append(idx)
...或者如果您要了解列表信息:
b = [idx for i in str1.split() for idx, j in enumerate(mylist) if i in j]
输出:
[4]
答案 1 :(得分:1)
从问题开始,str1 in s
永远不会为真,因为mylist
的任何元素都不包含整个str1
字符串。
假设单词边界很重要,则可以拆分字符串,然后找到包含该标记的字符串的索引
b = []
for s1 in str1.split():
for i, s2 in enumerate(mylist):
if s1 in s2:
b.append(i)
答案 2 :(得分:0)
也许这个可以帮忙!
mylist = ['abc', 'def', 'ghi', 'jkl', 'mno']
str1 = 'does mn have anything to do with it?'
str2 = 'I think mn is there'
b = [i for i, s in enumerate(mylist) for st in str2.split(' ') if st in s]
print(b)
答案 3 :(得分:0)
也许最好将其放入函数中?
str = 'does mno have anything to do with it?'
str2 = 'I think mn is there'
mylist = ['abc', 'def', 'ghi', 'jkl', 'mno']
def are_you_here(str, list):
return [list.index(x) for x in list if x in str]
are_you_here(str, mylist)
are_you_here(str2, mylist)
输出:
[4]
[]
答案 4 :(得分:0)
这可能会有所帮助,因为在str2中,您正在搜索特定的关键字“ mn”,因此我们将str1拆分为简单的单词列表,然后遍历该列表以查找项中存在mn的部分。
mylist = ['abc', 'def', 'ghi', 'jkl', 'mno']
str1 = 'does mn have anything to do with it?'
str2 = 'I think mn is there'
for i in str1.split(" "):
for j in mylist:
if i in j:
print("match found and its for " + i + " which is partially exist in " + j)