我如何可以提取列表下面给出具体的元组:如何从Python列表中提取特定的元组?
[[[(1, 4)]], [[(1, 3)], [(5, 4)]], [[(1, 2)]]]
我想提取具有相同的X轴的元组,如:
[(1,4), (1,3), (1,2)]
,而(5,4)应被丢弃。 请帮帮我。
感谢
我如何可以提取列表下面给出具体的元组:如何从Python列表中提取特定的元组?
[[[(1, 4)]], [[(1, 3)], [(5, 4)]], [[(1, 2)]]]
我想提取具有相同的X轴的元组,如:
[(1,4), (1,3), (1,2)]
,而(5,4)应被丢弃。 请帮帮我。
感谢
为了展平的列表,你应该总是使用itertools.chain。在这种情况下,你必须套用嵌套chain
来创建元组的平面列表
>>> l=[[[(1, 4)]], [[(1, 3)], [(5, 4)]], [[(1, 2)]]]
>>> [e for e in chain(*chain(*l)) if e[0] == 1]
[(1, 4), (1, 3), (1, 2)]
你应该实际使用'chain.from_iterable(l)'vs '链(* 1)'。更快。列表理解也比'chain(* l)'更快,但是'chain.from_iterable(l)'比LC更快。看时间。 – dawg 2013-02-23 18:10:18
那么你添加相比,你previous question
所以,这个列表理解作品列表的附加深度:
>>> l=[[[(1, 4)]], [[(1, 3)], [(5, 4)]], [[(1, 2)]]]
>>> def flat1(l): return [i for sub in l for i in sub]
...
>>> [t for t in flat1(flat1(l)) if t[0]==1]
[(1, 4), (1, 3), (1, 2)]
名单扁平列表的列表的理解方法如果大约与itertools.chain(*l)
相同的速度(略快)。
如果你想使用itertools来提高速度,你应该使用chain.from_iterable(l)
来代替。
这里是时机:
import timeit
n=1000000
c1='''
def f1(l):
return [e for e in itertools.chain(*itertools.chain(*l)) if e[0] == 1]
l1=f1([[[(1, 4)]], [[(1, 3)], [(5, 4)]], [[(1, 2)]]])
'''
c2='''
def f2(l):
def flat1(l): return [i for sub in l for i in sub]
return [t for t in flat1(flat1(l)) if t[0]==1]
l1=f2([[[(1, 4)]], [[(1, 3)], [(5, 4)]], [[(1, 2)]]])
'''
c3='''
def f1(l):
flat1=itertools.chain.from_iterable
return [e for e in flat1(flat1(l)) if e[0] == 1]
l1=f1([[[(1, 4)]], [[(1, 3)], [(5, 4)]], [[(1, 2)]]])
'''
t1=timeit.timeit(stmt=c1,setup='import itertools',number=n)
t2=timeit.timeit(stmt=c2,number=n)
t3=timeit.timeit(stmt=c3,setup='import itertools',number=n)
print ' chain(*l):',t1,'seconds'
print ' list comprehension:',t2,'seconds'
print 'chain.from_iterable:',t3,'seconds'
打印:
chain(*l): 4.32919406891 seconds
list comprehension: 4.32601380348 seconds
chain.from_iterable: 3.14966917038 seconds
你试过了什么?如果你表明自己已经完成了一些工作(这是因为其他人更有可能试图帮助你,并且因为它可以显示你的情况的更多细节,所以你会更有可能得到有用的答案。 – Blckknght 2013-02-23 06:39:26
这是不同于[你以前的问题](http://stackoverflow.com/q/15017497/78845)? – Johnsyweb 2013-02-23 06:41:40
@ Johnsyweb:我是新来的蟒蛇!试图做一个我的项目!我需要提取这些我的进一步计算值列表在列表中让我很害怕 – 2013-02-23 06:46:14