如何检查字符串是否存在于相同索引 python 中的列表中



我想逐字比较该词是否存在于列表中。

items=["michael jackson","nintendo", "michael jackson"]
aa = ["i think michael jackson is cool","i love nintendo","i miss jackson nintendo"]

for i, a in zip(items, aa):
token=a.split()
for x in token:
if x in i:
print "X: " + x

输出:

X: i
X: michael
X: jackson
X: i
X: nintendo
X: i
X: jackson

预期产出:

X: michael X: jackson #from "i think michael jackson is cool"
X: nintendo #from i love nintendo"
X: jackson #from "i miss jackson nintendo"

如您所见,i也被打印出来,因为imichaelnintendo,但我不希望这样。请注意,我想通过比较同一索引中的项目来比较itemsaa中的单词。

至于项目中的第3项,它将打印出jackson尽管与michael jackson相比时只有jackson存在。

请注意,aa 中第 3 项的结果应该只是"杰克逊",而不是"杰克逊"、"任天堂",因为列表应该在同一索引内进行比较。 项目中的第 3 个索引是"迈克尔杰克逊",没有"任天堂"m 因此结果应该只有"杰克逊"。

第一项与"迈克尔"和"杰克逊"匹配,因此我希望结果将它们打印在一行中,以便结果中的索引对应于项目的索引。因为如果我继续执行原始预期结果,我意识到"aa"中项目的顺序将丢失。意思是说,我不知道"迈克尔杰克逊"是从"aa"中的第一项中提取的

它非常简单。尝试:

items=["michael jackson","nintendo", "michael jackson"]
aa = ["i think michael jackson is cool","i love nintendo","i miss jackson nintendo"]
output,string = [],""
for xx,yy in zip(aa,items):
item = yy.split(" ")
for x in xx.split(" "):
if x in item:
string += "X: " + x + " "
if string != "":output.append(string)
string= ""
#printing data
for item in output:print item 

输出(预期(:

X: michael X: jackson 
X: nintendo 
X: jackson 

每对短语中输出单词的顺序重要吗?换句话说,第一个"迈克尔"和"杰克逊"应该按这个顺序出现吗?如果它很重要,这个解决方案是有效的,尽管它不是很有效:

from itertools import chain
list(chain.from_iterable([x for x in s1.split() for y in s2.split() if x==y] 
for s1,s2 in zip(aa, items)))
#['michael', 'jackson', 'nintendo', 'jackson']

如果顺序不重要,可以计算集合交集:

list(chain.from_iterable(set(s1.split()) & set(s2.split()) 
for s1,s2 in zip(aa, items)))
#['jackson', 'michael', 'nintendo', 'jackson']

第二种解决方案的速度提高了约 20%。

甚至更容易。迭代两个列表,然后迭代迭代变量:)

l1=["michael jackson","nintendo", "michael jackson"] 
l2 = ["i think michael jackson is cool","i love nintendo","i miss jackson nintendo"] 
for x in l1:
for y in x.split():
if y in x:print('X: '+y)

最新更新