我有一个' ID列表:
ids = [None, '20160928a', '20160929a', ... ]
以及某些特定内容的另一个列表'我发现使用fuzzywuzzy是重复的id:
repeat_offenders = ['20160928a', '20161115a', '20161121a', ... ]
我想再次使用fuzzywuzzy创建一个列表列表,其中包含重复ID位于列表中的位置(按索引)列表' ids'。所以输出看起来像这样(因为它们是重复的,列表中的每个列表至少包含两个元素:
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
答案 0 :(得分:1)
如果不必使用fuzzywuzzy
,您可以使用两个for-loops
来检查重复项,并生成list
,如下所示:
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]]