Python 如何获取成对元组列表中的第n个元素?
在这段代码中,我如何访问a1、b1、c1和d1的值?我觉得这可能是一种不直观的方式来做我想做的事情,但我想知道这是否可行。当我试着打字时,说Python 如何获取成对元组列表中的第n个元素?,python,list,tuples,Python,List,Tuples,在这段代码中,我如何访问a1、b1、c1和d1的值?我觉得这可能是一种不直观的方式来做我想做的事情,但我想知道这是否可行。当我试着打字时,说 a=[((a1,a2),(b1,b2)),((c1,c2),(d1,d2))] ((a1,a2),(b1,b2)) 然后它会回来 a[0] 这不是我想要的 我想退货,比如 a=[((a1,a2),(b1,b2)),((c1,c2),(d1,d2))] ((a1,a2),(b1,b2)) 假设这是Python: answer_list=[(a1,b
a=[((a1,a2),(b1,b2)),((c1,c2),(d1,d2))]
((a1,a2),(b1,b2))
然后它会回来
a[0]
这不是我想要的
我想退货,比如
a=[((a1,a2),(b1,b2)),((c1,c2),(d1,d2))]
((a1,a2),(b1,b2))
假设这是Python:
answer_list=[(a1,b1),(c1,d1)]
这是因为:
a1 = a[0][0][0]
b1 = a[0][1][0]
c1 = a[1][0][0]
d1 = a[1][1][0]
所以
因此
a[0][0] == (a1, a2)
a[0][1] == (b1, b2)
假设你的列表总是像你展示的那样是的,使用列表理解,你可以简单地做到:
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)))
randlet的回答显示了在Joran Beasley回答上展开的逻辑。这里是仅使用列表理解的代码示例,没有
itertools
打印列表(x[0]代表a中的t代表x中的t)
这几乎等同于:
更多关于列表理解的信息,请参见itertools,它提供了一种方法,可以将嵌套列表的列表一次展平一个级别: 你可以试试:
result = list()
for t in a:
for x in t:
result.append(x[0])
print result
然后根据需要访问您的数据为了进一步回答我的问题,我将如何将这些数据配对到新的元组列表中?因此,answerlist=[(a1,b1),(c1,d1)]给定一个平面列表,您可以将其与
zip(l[::2],l[1::2])
配对,但请注意,如果列表中的元素数为奇数,它将删除最后一个元素。另外,在同一个问题中继续问新问题通常不是一个好主意。你可以说:answerlist=[tuple(answerlist[:2]),tuple(answerlist[2:])]列表理解文档可以在
result = list()
for t in a:
for x in t:
result.append(x[0])
print result
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]