2014-11-05 157 views
0
a=[((a1,a2),(b1,b2)),((c1,c2),(d1,d2))] 

在这段代码中,我将如何访问a1,b1,c1和d1的值?我觉得这可能是做我想做的事的一种不直观的方式,但我想知道这是否可能。当我尝试键入这样说如何获得配对元组列表中的第n个元素?

a[0] 

那么它将返回

((a1,a2),(b1,b2)) 

这不是我想要的。

我想返回类似

answer_list=[(a1,b1),(c1,d1)] 

回答

0

假设这是Python的:

a1 = a[0][0][0] 
b1 = a[0][1][0] 
c1 = a[1][0][0] 
d1 = a[1][1][0] 

这个工作,因为:

a[0] == ((a1, a2), (b1, b2)) 

所以

a[0][0] == (a1, a2) 
a[0][1] == (b1, b2) 

,因此

a[0][0][0] == a1 
a[0][1][0] == b1 
0
from itertools import chain 

a=[(('a1','a2'),('b1','b2')),(('c1','c2'),('d1','d2'))] 
print list(chain.from_iterable(map(lambda x:zip(*x)[0],a))) 

假设你的列表总是看起来像你显示

2

是,使用列表理解,你能有什么简单地做:

answerlist = [i[0] for j in a for i in j] 

randlet的回答显示了逻辑突破

+1

为了推动我的问题,我怎么会那么对这样的成元组的一个新的列表? 因此, answerlist = [(a1,b1),(c1,d1)] – dan 2014-11-05 03:17:49

+0

给定一个扁平列表,您可以将其与zip(l [:: 2],l [1 :: 2])配对',但请注意,如果列表中有奇数个元素,它将删除最后一个元素。另外,在同一问题中继续提出新问题通常不是一个好主意。 – whereswalden 2014-11-05 04:04:36

+0

你可以这样说:answerlist = [tuple(answerlist [:2]),tuple(answerlist [2:])] – AtAFork 2014-11-05 04:09:33

0

展开在乔兰比斯利的回答。下面是代码示例只使用列表解析,没有itertools

print list(x[0] for t in a for x in t) 

这几乎是eqvivalent到:

result = list() 
for t in a: 
    for x in t: 
     result.append(x[0]) 
print result 

更多关于列表解析在python docs

+0

你应该编辑@ AtAFork的回答 – whereswalden 2014-11-05 04:06:03

0

itertools有一个配方压扁列表嵌套列表一次一个级别:https://docs.python.org/3/library/itertools.html?highlight=flatten

你可以试试:

from itertools import chain 

# the recipe... 
def flatten(listOfLists): 
    # "Flatten one level of nesting" 
    return chain.from_iterable(listOfLists) 

a=[((1,2),(3,4)),((5,6),(7,8))] 

print([list(flatten(t)) for t in a]) 
# [[1, 2, 3, 4], [5, 6, 7, 8]] 

print(list(flatten(flatten(a)))) 
# [1, 2, 3, 4, 5, 6, 7, 8] 

然后访问你的数据,你需要

相关问题