我有以下代码:
const projectsPage = require('../../lib/pages/projects.page');
const by = require('selenium-webdriver').By;
describe('Projects page', () => {
it('Search google', async() => {
await projectsPage.navigateTo();
const title = await driver.getTitle();
expect(title).toBe('Google');
const q = await driver.findElement(by.name('q'));
await q.sendKeys('test');
})
});
它打印:
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
的第一项与{{1}的第二项进行了比较},p
的第一项和q
的第三项,等等。
如何修改此代码,使其仅显示最后一个匹配项?因此,我只希望输出p
一次(因为在这种情况下,q
的第一项与a
中的第二项比较)
答案 0 :(得分:1)
为什么不简单地使用集合来查找两个列表之间的公共字符
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')
答案 1 :(得分:1)
如果由于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)
答案 2 :(得分:-1)
为此,我只需要反转两个list
即可:
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