1

我有一个类似的清单:

l = [[(3,4)], [(3,7)], [(3,8)]]

我使用该chain()函数来平展列表,现在我有一个类似的列表:

l2 = [3,4,3,7,3,8]

我想将重复的项目分成另一个列表:

l3 = [3,3,3]
l4 = [4,7,8]

我使用了该set()功能,但它破坏了重复的项目并导致:

l3 = [4,7,8]

但我想分别获得它们

4

2 回答 2

7

您必须进行某种计数。使用collections.Counter()该类会很容易:

from collections import Counter
counts = Counter(main_list)

duplicate_list, unique_list = [], []
for entry in main_list:
    if counts[entry] > 1:
        duplicate_list.append(entry)
    else:
        unique_list.append(entry)

counts是多套或袋子;entry 到它的 count in 的映射main_list。上面的例子保留了 的顺序main_list

于 2013-03-01T10:17:50.003 回答
0

扩展到@Martijn Pieters 答案,您可以使用 ifilter 过滤掉那些与 lambda 表达式中的条件匹配的内容(ifilter 中的第一个参数):

from collections import Counter
from itertools import ifilter

counts = Counter(l2)    

l3 = list(ifilter(lambda x: counts[x] > 1, l2))
l4 = list(ifilter(lambda x: counts[x] == 1, l2))
于 2013-03-01T10:39:27.850 回答