【问题标题】:Get unique values in List of Lists in python在python中的List of Lists中获取唯一值
【发布时间】:2015-08-14 10:56:19
【问题描述】:

我想创建一个列表(或集合),其中包含出现在 python 列表列表中的所有唯一值。 我有这样的事情:

aList=[['a','b'], ['a', 'b','c'], ['a']]

我想要以下内容:

unique_values=['a','b','c']

我知道对于字符串列表,您可以只使用 set(aList),但我不知道如何在列表列表中解决这个问题,因为 set(aList) 会收到错误消息

unhashable type: 'list'

我该如何解决?

【问题讨论】:

  • 您可以先展平列表。 stackoverflow.com/search?q=[python]+flatten+list(仅供参考,在 Python 中这些称为列表,而不是数组)
  • 谢谢,我不知道哪个是正确的;)
  • 我已经看到列表推导这样做了,但由于我的列表很大,我猜想从效率方面来说这将是一个糟糕的调用
  • 您可以使用生成器表达式来避免创建第二个列表:python.org/dev/peps/pep-0289。但是你必须遍历嵌套列表中的所有元素,这是没有办法的。

标签: python list set unique


【解决方案1】:
array = [['a','b'], ['a', 'b','c'], ['a']]
result = {x for l in array for x in l}

【讨论】:

  • 完成了这项工作,非常感谢!难道没有更好的方法来进行这种思考而不需要迭代吗? (我是初学者,但我认为避免循环是拥有大 len(array) 时要走的路)
  • 恐怕没有更简单的方法了。你有一个精确定义的输入结构,你有一个精确定义的输出结构,并且有必要进行转换。由于转换涉及所有元素,因此有必要“访问”所有元素。好吧,有很多不同的方法可以获得结果(参见其他帖子),但迭代总是存在于内部。
【解决方案2】:

投票最多的 2 个答案对我不起作用,我不知道为什么(但我有整数列表)。最后我这样做了:

unique_values = [list(x) for x in set(tuple(x) for x in aList)]

【讨论】:

    【解决方案3】:

    你可以使用itertools的chain来扁平化你的数组,然后调用set就可以了:

    from itertools import chain
    
    array = [['a','b'], ['a', 'b','c'], ['a']]
    print set(chain(*array))
    

    如果您期待 list 对象:

    print list(set(chain(*array)))
    

    【讨论】:

    • 我刚刚创建了我的帐户,还不能筹集任何东西 :( 你的回答很有帮助,但我接受了第一个答案。当我有足够的点数时(或者 idk 是什么允许筹集答案)我会为你做的
    • @mihasa 不用担心。很高兴我的回答对您有所帮助。
    • 刚刚得到它...提出!
    • 还有set(chain.from_iterable(array))。
    【解决方案4】:

    试试这个。

    array = [['a','b'], ['a', 'b','c'], ['a']]
    res=()
    for item in array:
        res = list(set(res) | set(item))
    print res
    

    输出:

    ['a', 'c', 'b']
    

    【讨论】:

      【解决方案5】:

      你可以使用numpy.unique:

      import numpy
      import operator
      print numpy.unique(reduce(operator.add, [['a','b'], ['a', 'b','c'], ['a']]))
      # ['a' 'b' 'c']
      

      【讨论】:

        【解决方案6】:
        array = [['a','b'], ['a', 'b','c'], ['a']]
        unique_values = list(reduce(lambda i, j: set(i) | set(j), array))
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-06-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-09-09
          • 2022-12-17
          • 1970-01-01
          • 2020-11-22
          相关资源
          最近更新 更多