迭代地从列表列表中创建唯一项列表

时间:2017-06-22 11:49:23

标签: python

我尝试通过从每个列表中选择一个项目来创建列表列表中的唯一项目列表,如果列表中的项目已经在唯一项目列表中,则选择第二个唯一项目等等。见下面的列表和我的尝试;

mylist=`[[1,2,3],[1,2,3],[1,2,3]]`

def unique(lists):
    uniquelst=[]
    for _lst in lists:
        if _lst[0] not in uniquelst:
            uniquelst.append(_lst[0])
        else:
            uniquelst.append(_lst[1])

    return uniquelst

我的输出:[1, 2, 2]

预期输出:[1, 2, 3]

每个列表中只能选择一个项目,因此适当的解决方案应该能够为此示例生成相同的结果[[1, 4, 3], [1, 2, 5], [1, 2, 3]]任何想法?感谢。

4 个答案:

答案 0 :(得分:5)

flat_list = [item for sublist in mylist for item in sublist]
print(list(set(flat_list)))

答案 1 :(得分:5)

使用set对象和itertools.chain(iterables)函数:

import itertools

mylist = [[1,2,3],[1,2,3],[1,2,3]]
result = set(itertools.chain(*mylist))
print(list(result))

输出:

[1, 2, 3]

答案 2 :(得分:4)

根据您提到的限制,此代码应该有效 -

def unique(lists):
    uniquelst = []
    for lst in lists:
        for elem in lst:
            if elem not in uniquelst:
                uniquelst.append(elem)
                break

    return uniquelst

第二个循环遍历内部列表的元素,并检查它们是否已存在于uniquelst中。如果它们不存在,添加元素并从内循环中断。

我忘记提到的一件事是,此代码假定内部列表的元素按排序顺序排列。如果不是这种情况,请在第二个循环之前使用sorted()sort()对内部列表进行排序

答案 3 :(得分:1)

newlist = []
for l in mylist:
    newlist = newlist + l
return list(set(newlist))

这对你有帮助吗?