列表列表中的唯一元素

时间:2016-11-28 20:28:57

标签: list python-3.x duplicates unique

如果我有一个嵌套列表,如:

application/x-www-form-urlencoded

在这个例子中,' AB'在前两个嵌套列表中很常见。如何删除' AB'在两个列表中同时保持其他元素不变?一般情况下,如何从两个或多个嵌套列表中出现的每个嵌套列表中删除一个元素,以便每个嵌套列表都是唯一的?

l = [['AB','BCD','TGH'], ['UTY','AB','WEQ'],['XZY','LIY']]

是否可以使用for循环执行此操作?

谢谢

3 个答案:

答案 0 :(得分:0)

from collections import Counter
from itertools import chain

counts = Counter(chain(*ls)) # find counts
result = [[e for e in l if counts[e] == 1] for l in ls] # take uniqs

答案 1 :(得分:0)

一种选择是做这样的事情:

from collections import Counter
counts = Counter([b for a in l for b in a])
for a in l:
    for b in a:
        if counts[b] > 1:
            a.remove(b)

编辑:如果你想避免(非常有用的标准库)collections模块(参见评论),你可以用以下自定义计数器替换上面的counts

counts = {}
for a in l:
    for b in a:
        if b in counts:
            counts[b] += 1
        else:
            counts[b] = 1

答案 2 :(得分:0)

没有导入的简短解决方案是首先创建原始列表的getSignedUrl d版本,然后遍历原始列表并删除计数大于1的元素:

reduce

应打印:

lst = lst = [['AB','BCD','TGH'], ['UTY','AB','WEQ'],['XZY','LIY']]

reduced_lst = [y for x in lst for y in x]

output_lst = []

for chunk in lst:
    chunk_copy = chunk[:]
    for elm in chunk:
        if reduced_lst.count(elm)>1:
            chunk_copy.remove(elm)
    output_lst.append(chunk_copy)


print(output_lst)

我希望这证明有用。