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