Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 返回模糊匹配列表的索引_Python_Regex_List_Fuzzywuzzy - Fatal编程技术网

Python 返回模糊匹配列表的索引

Python 返回模糊匹配列表的索引,python,regex,list,fuzzywuzzy,Python,Regex,List,Fuzzywuzzy,我有一个“ID”列表: ids = [None, '20160928a', '20160929a', ... ] 我发现的某些“ID”的另一个列表是使用fuzzywuzzy的重复ID: repeat_offenders = ['20160928a', '20161115a', '20161121a', ... ] 我想再次使用fuzzyfuzzy创建一个列表,其中包含重复ID在列表“ID”中的索引位置列表。因此,输出看起来像这样,因为它们是重复的,所以列表中的每个列表至少包含两个元素: co

我有一个“ID”列表:

ids = [None, '20160928a', '20160929a', ... ]
我发现的某些“ID”的另一个列表是使用fuzzywuzzy的重复ID:

repeat_offenders = ['20160928a', '20161115a', '20161121a', ... ]
我想再次使用fuzzyfuzzy创建一个列表,其中包含重复ID在列表“ID”中的索引位置列表。因此,输出看起来像这样,因为它们是重复的,所以列表中的每个列表至少包含两个元素:

collected_ids = [[0,5,700], [6,3], [4,826,12]]
我的尝试,当前仅返回id,而不是id的位置:

collected_urls = []
for offender in repeat_offenders[:10]:
     best_match = process.extract(offender, ids)
     collection = []
     for match in best_match:
         if match[1] > 95:
            collection.append(match[0])
         else:
            pass
     collected_urls.append(collection)
更新,我尝试使用Moe的答案查找/分组精确匹配:

idz = ids
collected_ids = []
for i in range(len(idz)):
    tmp = [i]
    for j in range(len(ids)):
        if idz[i] == idz[j] and i != j:
            tmp.append(j)
            del j 
    if len(tmp) > 1:
        collected_ids.append(tmp)
    del i
如果不一定要使用fuzzyfuzzy,可以使用两个for循环来检查重复项并生成列表,如下所示:

collected_ids = []
for i in xrange(len(ids)):
    tmp = [i]
    for j in xrange(len(ids)):
        if ids[i] == ids[j] and i != j:
            tmp.append(j)
    if len(tmp) > 1:
        collected_ids.append(tmp)
collected_ids = list(set(collected_ids))
collected_ids = []
ids = ['a', 'b', 'a', 'c', 'd', 'a', 't', 't', 'k', 'c']
check = [] 
for i in range(len(ids)):
    tmp = [i]
    check.append(i)  
    for j in range(len(ids)):
        if ids[i] == ids[j] and i != j and j not in check:
            tmp.append(j)
            check.append(j)
    if len(tmp) > 1:
        collected_ids.append(tmp)
print(collected_ids)
编辑:

如果要避免重复,可以创建一个列表来检查是否已添加索引,如下所示:

collected_ids = []
for i in xrange(len(ids)):
    tmp = [i]
    for j in xrange(len(ids)):
        if ids[i] == ids[j] and i != j:
            tmp.append(j)
    if len(tmp) > 1:
        collected_ids.append(tmp)
collected_ids = list(set(collected_ids))
collected_ids = []
ids = ['a', 'b', 'a', 'c', 'd', 'a', 't', 't', 'k', 'c']
check = [] 
for i in range(len(ids)):
    tmp = [i]
    check.append(i)  
    for j in range(len(ids)):
        if ids[i] == ids[j] and i != j and j not in check:
            tmp.append(j)
            check.append(j)
    if len(tmp) > 1:
        collected_ids.append(tmp)
print(collected_ids)
输出:

[[0, 2, 5], [3, 9], [6, 7]]

你为什么要用fuzzywuzzy来查找重复项,如果字符串匹配,你不能简单地测试相等性吗?因为我想对相似的ID进行分组,因为“重复项”可能不完全相同,这就是我使用95阈值的原因…但是有相当多的重复项完全相同-因此使用相等性可能是最简单和足够好的选择…你介意告诉我怎么做吗我在平等的基础上要求什么?谢谢谢谢,但这不起作用…我正在使用的python3中没有定义xrange。另一件事是,一旦“我”找到它,它与之匹配,它的匹配应该从列表“ID”中删除,因为否则它将创建一个迭代过程,并在收集的ID中包含一个重复的列表…我尝试解决这些问题,并尝试“更新”我的问题:@GrahamStreich我已更新答案以避免重复的,请检查并让我知道=很高兴知道:如果答案解决了您的问题,请不要忘记接受!谢谢,我会接受你的答案,除了你的答案只提供了一个使用模糊模糊的实际问题的启发;p我非常感谢您的时间和回答:如果您使用的是python3,请使用range而不是xrange