如何在配对元组列表中获取第n个元素?

时间:2014-11-05 02:23:44

标签: python list tuples

a=[((a1,a2),(b1,b2)),((c1,c2),(d1,d2))]

在这段代码中,我如何只访问a1,b1,c1和d1的值?我觉得这可能是一种不直观的方式来做我喜欢的事情,但我想知道这是否可行。当我尝试输入类似

的内容时
a[0]

然后它会返回

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

这不是我想要的。

我想返回类似

的内容
answer_list=[(a1,b1),(c1,d1)]

5 个答案:

答案 0 :(得分:2)

是的,使用列表理解你可以做到:

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

randlet的回答显示了逻辑分解

答案 1 :(得分: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

答案 2 :(得分: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)))

假设您的列表总是看起来像您展示的那样

答案 3 :(得分:0)

扩大Joran Beasley的答案。以下是仅使用列表推导的代码示例,没有itertools

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

几乎与以下方面有效:

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

有关python docs

中列表推导的更多信息

答案 4 :(得分: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]

然后根据需要访问您的数据