2014-11-05 159 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] 

然後訪問你的數據,你需要

相關問題