如何在python中使用itertools仅打印最后一个匹配?

如何在python中使用itertools仅打印最后一个匹配?,python,itertools,Python,Itertools,我有以下代码: p = ['a','b','c','d'] q = ['a','a','x','y','z'] for (p, q) in itertools.product(p, q): if p == q: print(q) 它打印: a a 添加一些附加日志后,似乎将p的第一项与q的第一项进行比较,然后将p的第一项与q的第二项进行比较,将p的第一项与q的第三项进行比较,等等 如何修改此代码,使其仅打印最后一个匹配项?因此,我只希望输出a一次(因为在这种情况下,

我有以下代码:

p = ['a','b','c','d']
q = ['a','a','x','y','z']

for (p, q) in itertools.product(p, q):
    if p == q:
        print(q)
它打印:

a
a
添加一些附加日志后,似乎将
p
的第一项与
q
的第一项进行比较,然后将
p
的第一项与
q
的第二项进行比较,将
p
的第一项与
q
的第三项进行比较,等等


如何修改此代码,使其仅打印最后一个匹配项?因此,我只希望输出
a
一次(因为在这种情况下,
p
的第一项与
q
中的第二项比较)

为什么不简单地使用一个集合来查找两个列表之间的公共字符呢

p = ['a','b','c','d']
q = ['a','a','x','y','z']

print(set(p).intersection(set(q)))
输出将是
{'a'}

或者,如果无法使用集合,则将所有匹配项收集到列表中,并打印最后一个元素

import itertools

p = ['a','b','c','d']
q = ['a','a','x','y','z']

items = []
for (p, q) in itertools.product(p, q):
    #Collect all matches in a list
    if p == q:
        items.append((p,q))

#Print the last item
print(items[-1])

输出将是
('a','a')

如果您负担不起先将
p
q
转换为集合,因为它们太大,您可以在运行时将已匹配的值添加到集合中,并检查是否包含:

p = ['a','b','c','d']
q = ['a','a','x','y','z']
seen = set([])

for a, b in itertools.product(p, q):
    if a == b and b not in seen:
        print(b)
        seen.add(b)

为了做到这一点,我将简单地反转两个
列表
s,即:

import itertools
p = ['a','b','c','d']
q = ['a','a','x','y','z']

for (x, y) in itertools.product(p[::-1], q[::-1]):
    if x == y:
        print(y)
        break
输出:

a

您是否被阻止在列表中创建和累积值,然后将其转换为一组值?您的代码应该做什么?您是否在两个列表之间找到了共同字符?我同意@juanpa.arrivillaga的观点,即在不知道您的意图的情况下给出任何解决方案是没有意义的。
[a代表itertools.product(p,q)中的a,b)如果a==b][1]
你能使用一个与p(字符串列表)和q(dict列表,dict的一个键与p中的一个字符串匹配)相交的集合吗?是的,一组p和dict@DenCowboy的一组键列表所以
set(p)
set(dct)
我试过:打印(set(a).相交(set(b['value']))但是它返回了:TypeError:列表索引必须是整数或切片,而不是strw什么是
a
b
,你能更清楚地了解这一点吗,这似乎与Dencowboy手头的问题无关对不起,我的意思是像p和q一样。p和原来的问题一样,q实际上是一个dict列表,比如[{'value':'a'},{'value':'s'},{'value':'t'}]