【问题标题】:Generate unique list from a list of lists从列表列表生成唯一列表
【发布时间】:2014-07-09 19:05:54
【问题描述】:

我正在尝试定义一个函数,该函数将接受任意数量的列表,并从这些列表中生成一个唯一元素列表。 (我使用的是 Python 3.4)

例子:

a = ['lion', 'tiger', 'panther']
b = ['dog', 'lion', 'bear']
c = ['rat', 'dog', 'tiger']

def merge(*var_list):
    newlist = []
    for item in var_list:
        newlist.append(item)
    return newlist

评估:

merge(a,b)

生产:

[['lion', 'tiger', 'panther'], ['dog', 'lion', 'bear']]

理想情况下,我希望它生成一个如下所示的列表:

['lion, 'tiger', 'panther', 'dog', 'bear']  #order is not important

我怎样才能达到上述结果?

【问题讨论】:

  • 你能假设每个原始列表中的元素都是唯一的吗? (如果可以的话,它会稍微简化/加速事情。)
  • 您是否错过了预期结果中的老鼠?
  • var_list 中的项目是您传递给合并的 列表,这就是为什么您的结果是列表列表,而不仅仅是字符串列表(因为您需要)。
  • @klashxx "rat" 不在输出中,因为他只合并了 a 和 b。请参阅“评估:合并(a,b)”。如果他要合并 a b 和 c,然后使用,rat 将在输出中。
  • 我明白了,答案刚刚更新。 ;)

标签: python unique python-3.4


【解决方案1】:

你可以使用set:

list(set(a+b))

正如 Greg 在 cmets 中解释的那样,Python 将每个列表视为一个 set,其中 set 具有 由无序的唯一元素组成的属性。

通过将集合相加,您将能够保持无序性的属性。

来自解释器:

>>> a+b
['lion', 'tiger', 'panther', 'dog', 'lion', 'bear']
>>> list(set(a+b))
['tiger', 'lion', 'dog', 'bear', 'panther']

【讨论】:

  • 稍微解释一下就好了。这是有效的,因为这段代码让 Python 将每个列表视为一个集合,其中一个集合具有由有序的唯一元素组成的属性。通过将集合相加,您将能够保持无序性并得出您的解决方案。
  • 感谢@GregHilston,无法更好地解释。请允许我用你的话
  • 没问题。 +1 用于解决方案和解释器输出。又快又干净。
  • 谢谢大家!但是,如何将 set() 函数合并到我的原始代码中?我需要能够定义一个与“list(set(a+b)) 产生相同结果的函数。干杯!
  • 你的意思是模仿 set ,但不使用它?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-22
  • 2011-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多