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)]
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)]
假設這是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
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)))
假設你的列表總是看起來像你顯示
是,使用列表理解,你能有什麼簡單地做:
answerlist = [i[0] for j in a for i in j]
randlet的回答顯示了邏輯突破
展開在喬蘭比斯利的回答。下面是代碼示例只使用列表解析,沒有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
你應該編輯@ AtAFork的回答 – whereswalden 2014-11-05 04:06:03
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]
然後訪問你的數據,你需要
爲了推動我的問題,我怎麼會那麼對這樣的成元組的一個新的列表? 因此, answerlist = [(a1,b1),(c1,d1)] – dan 2014-11-05 03:17:49
給定一個扁平列表,您可以將其與zip(l [:: 2],l [1 :: 2])配對',但請注意,如果列表中有奇數個元素,它將刪除最後一個元素。另外,在同一問題中繼續提出新問題通常不是一個好主意。 – whereswalden 2014-11-05 04:04:36
你可以這樣說:answerlist = [tuple(answerlist [:2]),tuple(answerlist [2:])] – AtAFork 2014-11-05 04:09:33