Crossin的编程教室

标题: 怎么从一些数据里去重呢 [打印本页]

作者: 人工智能    时间: 2018-4-8 21:07
标题: 怎么从一些数据里去重呢
quchong.png
我想爬取这个列表里的歌但是这个列表里有重复的歌,我该如何把再次出现的歌名去重去掉呢

作者: crossin先生    时间: 2018-4-8 23:01
不是完全相同的不太方便,除非你每个歌名都去匹配一下后面所有的歌,做个对比
如果完全相同的去重,直接用 set 就可以实现
作者: 人工智能    时间: 2018-4-9 10:35
crossin先生 发表于 2018-4-8 23:01
不是完全相同的不太方便,除非你每个歌名都去匹配一下后面所有的歌,做个对比
如果完全相同的去重,直接用  ...

我需要的是不完全相同的匹配,程序是这个样子  这些歌名是我爬下来的列表 然后我想每往txt存入一个歌名都要和txt之前存入的歌名做判断看看如果存在这个歌就不存,如果没有就把歌名存进去,而且现在的问题是
拿 ‘’告白气球‘’  举例    我先存入了歌名 ‘’告白气球‘’  然后下次一列表获取的值是 ‘’告白气球(魔术与歌曲)‘’
这个我和之前的匹配的话 我怎么能匹配到 ‘’告白气球‘’ 这个字符串呢,  用in没法实现  因为 in 匹配的 后面匹配的字符串 肯定比之前的字符串短或者相等  才能匹配到。
有没有什么办法呢
作者: zhaolehua    时间: 2018-4-9 13:48
人工智能 发表于 2018-4-9 10:35
我需要的是不完全相同的匹配,程序是这个样子  这些歌名是我爬下来的列表 然后我想每往txt存入一个歌名都 ...

有一个方法就是在存入文件后去重,用正则表达式作为去重条件,满足条件删除重复中的一个。
作者: crossin先生    时间: 2018-4-9 14:50
人工智能 发表于 2018-4-9 10:35
我需要的是不完全相同的匹配,程序是这个样子  这些歌名是我爬下来的列表 然后我想每往txt存入一个歌名都 ...

你可正反两个方向都用 in 判断一下啊
作者: 人工智能    时间: 2018-4-9 19:00
zhaolehua 发表于 2018-4-9 13:48
有一个方法就是在存入文件后去重,用正则表达式作为去重条件,满足条件删除重复中的一个。 ...

这些歌名。。我想不出正则怎么写啊
作者: 人工智能    时间: 2018-4-9 19:02
crossin先生 发表于 2018-4-9 14:50
你可正反两个方向都用 in 判断一下啊

什么意思啊 没明白
作者: crossin先生    时间: 2018-4-9 23:19
人工智能 发表于 2018-4-9 19:02
什么意思啊 没明白

前面的 in 后面的 and 后面的 in 前面的
作者: 人工智能    时间: 2018-4-10 17:31
crossin先生 发表于 2018-4-9 23:19
前面的 in 后面的 and 后面的 in 前面的

好像我的数据没法用这种办法去重
作者: crossin先生    时间: 2018-4-11 12:02
把已有数据放in前面判断一次,再把已有数据放in后面判断一次

a = "告白气球"
b = "告白气球(魔术与歌曲)"
if (a in b) or (b in a):
    略过

不符合你的要求?

首先你规则想清楚了没有。不然我们讨论了半天,你说这不是你要的效果

再复杂的情况你也没法用简单的字符串方法。去搜索下“文本相似度匹配”来实现吧

作者: 人工智能    时间: 2018-4-11 14:54
crossin先生 发表于 2018-4-11 12:02
把已有数据放in前面判断一次,再把已有数据放in后面判断一次

a = "告白气球"

这个方法适用于列表吗 比如 list[---]  然后 for (a in list)or (list in a):  这样不能用吧
作者: crossin先生    时间: 2018-4-11 21:46
人工智能 发表于 2018-4-11 14:54
这个方法适用于列表吗 比如 list[---]  然后 for (a in list)or (list in a):  这样不能用吧 ...

for i in list_name:
   if a in i or i in a:
      xxx

如果你连 if 和 for 循环还没搞清楚,那应该先补一补前面基础的课程,而不是急于实现过于复杂的功能
作者: 人工智能    时间: 2018-4-11 23:08
crossin先生 发表于 2018-4-11 21:46
for i in list_name:
   if a in i or i in a:
      xxx

打错了。。。    if (a in list)or (list in a):

我的意思是 list是个列表类型 然后 上面的语句能用吗  
作者: crossin先生    时间: 2018-4-12 11:37
人工智能 发表于 2018-4-11 23:08
打错了。。。    if (a in list)or (list in a):

我的意思是 list是个列表类型 然后 上面的语句能 ...

我已经写出来给你了

你还是对字符串、list之类的基本操作不熟悉啊。请去看看之前的基础课程
作者: 人工智能    时间: 2018-4-12 21:41
crossin先生 发表于 2018-4-12 11:37
我已经写出来给你了

你还是对字符串、list之类的基本操作不熟悉啊。请去看看之前的基础课程 ...

嗯嗯




欢迎光临 Crossin的编程教室 (https://bbs.crossincode.com/) Powered by Discuz! X2.5