我正在尝试创建允许我获取列表中唯一子列表的列表的函数。这些功能适用于某些列表列表而不适用于其他列表,我不确定原因。
获取重复子列表的索引然后构建它们列表是一种有效,可靠的方法是什么?
以下最小工作示例说明了该功能。找到列表public String getReportName()
{
return _reportName;
}
public void setReportName(String reportName)
{
_reportName = reportName;
}
的重复项,但列表a
找不到。
b
答案 0 :(得分:1)
您可以使用Counter dict将子列表映射到元组并获取计数,仅保留计数为>的子列表。 1:
from collections import Counter
a = [[1, 2], [1, 2], [2, 2], [3, 2], [4, 2], [5, 2], [5, 2]]
cn = Counter(map(tuple,a))
print([sub for sub in a if cn[tuple(sub)] > 1])
适用于混合类型并获得独特的回报:
from collections import Counter
a = [[1, 2], [1, 2], [2, 2], [3, 2], [4, 2], [5, 2], [5, 2], "foo", 123, 123]
def counts(x):
for ele in x:
if isinstance(ele, Hashable):
yield ele
else:
yield tuple(ele)
def unique_dupes(x):
cnts = Counter(counts(x))
for ele in x:
t = ele
if not isinstance(ele, Hashable):
t = tuple(ele)
if cnts[t] > 1:
yield ele
del cnts[t]
print(list(unique_dupes(a)))
输出:
[[1, 2], [5, 2], 123]
答案 1 :(得分:0)
问题必须来自以下几点:
if isinstance(element, list):
element = tuple(element)
if element not in seen:
seen.add(element)
那么如果你已经在seen
说[10,15]
,然后你想检查看到的[15,10]
,它会返回FALSE
。
对此进行修复,当您认为[x,y]
与[y,x]
相同时,就是按照这种方式对您检查的每个元素进行排序:
if isinstance(element, list):
element = tuple(sorted(element))
if element not in seen:
seen.add(element)
答案 2 :(得分:0)
列表理解很简单
list_a = [[1, 2], [1, 2], [2, 2], [3, 2], [4, 2], [5, 2], [5, 2]]
unique_list=[]
duplicate_list=[]
sorted_list=[sorted(item) for item in list_a]
final_list=[unique_list.append(item) if item not in unique_list else duplicate_list.append(item) for item in sorted_list]
print(unique_list)
print(duplicate_list)
答案 3 :(得分:-1)
Python列表具有一个漂亮的内置函数,称为count
。使用此功能,您可以:
a = [[1, 2], [1, 2], [2, 2], [3, 2], [4, 2], [5, 2], [5, 2]]
dups = list()
for e in a:
if a.count(e) > 1:
dups.append(e)
这会为您提供一个名为dups
的列表,其中包含[[1,2],[1,2],[5,2],[5,2]]