我目前有两个列表。一个包含两个锚元素,都包含相同的href
,但不同的text
:
list1 = [<a href="link1">'text1'</a>, <a href="link1">'text2'</a>,
<a href="link2"><a href="link2"><span class="flagicon">
<img Img stuff/></span>'text3'</a>, <a href="link2">'text4'</a>]
从这个列表中,我已经设法获得了href
链接,然后我删除了所有重复的链接。由于存在两个href
链接,并且它们是相同的,因此删除了其中一个。现在,我的唯一href
链接列表是:
list2 = ['link1','link2']
现在是棘手的部分。我想使用第二个列表中唯一的href
,在第一个列表中查找相应的文本,但只能查找一次。我使用这个例子只提取唯一的href
元素,同时保持顺序。我还想使用它来从list1
获得属于唯一href
的text
。
seen_text = set()
seen_text_add = seen_text.add
unique_text = [x.text for x in list1 if list2 in x and not (x in seen or seen_add(x))]
但这只是返回一个空列表。这能做到吗?
编辑:我的预期结果是unique_text =['text1','text3']
以下是如何使用生成器(针对最新示例进行了编辑):
import re
list1 = ["<a href='link1'>'text1'</a>",
"<a href='link1'>'text2'</a>",
"<a href='link2'><a href='link2'><span class='flagicon'><img Img stuff/></span>'text3'</a>",
"<a href='link2'>'text4'</a>"]
list2 = ['link1', 'link2', 'link3']
def gen(txt):
for elem in list1:
if txt in elem:
# Grab only the text between a pair of tags (meaning end of tag >text< start of next tag)
yield re.match('.*>(?P<text>.+)<.*', elem).group('text')
# For each text in list2 create a generator that will yield matching text from list1.
# Call next on that generator to grab the first result only, with default value of "not found"
x = [next(gen(text), "not found") for text in list2]
print(x)
>>> ["'text1'", "'text3'", 'not found'] # Further process the list (get rid of the quotes etc.)
如果这仍然不起作用,你能打印出list1
和list2
的内容并粘贴在这里吗?