2017-10-19 39 views
-1

我有一个列表一样[ ((xs,xe),idx),...]如何通过过滤器添加多个元素到一个新的列表一个旧

我想收集XS和XE为一组,像这样

s={ xs,xe for ((xs,xe),idx) 

我知道我可以使用它两次,分别添加xs,xe。

有没有更好的方法来做到这一点?

+0

是不是只是'{x对于X,Y在}'? – khelwood

+3

更可能是'{x for xx,idx in my_list for x in xx}'不确定是否'更好',而不是2次执行它... – Julien

+0

目前还不清楚你要完成什么或者代码如何问题 - 哪些不做任何过滤,甚至不是有效的Python语法 - 都应该起作用。请[编辑]你的问题,并至少展示一个更完整的输入和期望输出的例子(因为也许我们可以弄清楚你想做什么)。 – martineau

回答

0

您可以使用itertools.chain.from_iterable

>>> import itertools 
>>> lst = [((1,2), 'a'), ((3,4), 'b')] 
>>> s = set(itertools.chain.from_iterable(pair for pair, _ in lst)) 
>>> s 
set([1, 2, 3, 4]) 
+0

谢谢。它看起来很复杂,可能我宁愿用两次s = {a for(a,b),idx in lst} | {b for(a,b),idx in lst} –

+1

唯一真正的复杂性是涉及的类方法的名称。 'fi = itertools.chain.from_iterable; s = set(fi(pair for pair,_ inlst))'。没有理由迭代你的设置两次,建立两个需要合并到第三个对象中的临时'set'对象。 – chepner

+0

谢谢。我很害怕这个真棒名字。我会研究它。 –

相关问题