2017-05-01 24 views
0

我试图做一个嵌套的列表理解,但我无法弄清楚我该怎么做。目前,我有这样一个循环:添加到嵌套列表中的变量理解

filtered = [] 
p = -1 
for i in list: 
    p += 1 
    for k in list_of_lists[p]: 
    if not k in filter: 
     filtered.append(k) 

虽然这个工作,它需要大约5-8秒为它完成,这个时间量是正在使用它的情况下几乎是不可接受的。我试图让它进入一个列表理解,但我似乎无法找到一种方法来使p += 1在列表中的理解。我试过这个:

filtered = [i for i in list for k ind list_of_list[p], p+=1] 

但它显然不起作用。我想知道是否有任何方法来解决这个问题。

+0

您能否提供您的输入和期望输出的示例? – Allen

+0

你为什么在列表中循环,然后使用list_of_lists? – Neil

+0

只能用''enumerate''替换''p''吗? – Grimmy

回答

1

我会变平它然后将其转换为set,因为你不能在列表理解中自引用。不同之处在于一个集合只能有每个项目中的一个,而订单没有被强制执行。

list_of_lists = [["blue","green","red"],["red","yellow","white"],["orange","yellow","green"]] 
filtered = set(y for x in list_of_lists for y in x) 
print(filtered) 
+0

我认为这是正确的方法,但我不会说“设置和列表”功能“基本相同”。它们是两种不同的容器类型,具有非常不同的用例。列表是序列,因此它们是有序的并且具有索引行为,并且它们具有线性时间成员资格测试。集合是无序的,只保存唯一值,并且具有恒定时间的成员资格测试。 –

+0

@ juanpa.arrivillaga感谢您的输入,更新。 – Neil