如何在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'}]