【问题标题】:How to make a list with no duplicates如何制作没有重复的列表
【发布时间】:2019-09-28 07:40:45
【问题描述】:

好的,我将从我所知道的开始。我知道您可以制作列表,然后创建这些列表的副本,以删除所有/不包括列表项双打。我正在寻找的是一个可以检查自身而不包含重复项的列表。

下面的代码是我想要做的,但链接列表还不存在。所以我得到一个名称错误。我再次知道我可以制作一个新列表并告诉它不要包含这些项目,但我正在寻找一种很好的单行方式来实现这一目标。也许它需要我迭代列表有点不同并且需要 2 行,但目标是创建一个没有重复的列表,而不依赖于重写列表或创建一个新列表。基本上只需要遍历列表一次(在创建期间)。

from bs4 import BeautifulSoup as bs4
import requests
import sys 
import re

try: 
    page = requests.get(sys.argv[1])
except IndexError:
    page = requests.get("https://medium.com")

body = bs4(page.content, "html.parser")
links = [a['href'] for a in body.find_all("a") if a['href'] not in links] 

【问题讨论】:

  • 您的对象列表是否需要按任何特定顺序排列?
  • 您可以从当前列表项快速创建一个set,然后在使用列表理解中的潜在新成员更新列表时进行检查。

标签: python arrays list


【解决方案1】:

您是否尝试使用 set 并将它们转换回列表?

links = list(set([a['href'] for a in body.find_all("a")]))

【讨论】:

  • 我实际上只是想我可以做到 links = [] for i in [a['href'] for a in body.find_all("a")]: try: links.index(i) except: links.append(i) 但你的方式更好/正是我需要的
  • 注意,你可以只使用集合理解,所以list({a['href'] for a in body.find_all("a")})
  • 老实说,一套正是我所需要的。添加时,集合还将处理任何重复项。所以链接实际上现在是我的代码中的一个集合。 list = {} 以便稍后我可以这样做:for i in new_links_comming_in: links.add(i) 它在回购中:github.com/icarus612/spiderPY-medium 如果你想检查一下。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-24
  • 2016-11-08
相关资源
最近更新 更多