访问列表中元组中的值

时间:2011-01-26 02:03:58

标签: python list tuples

[(1,2), (2,3), (4,5), (3,4), (6,7), (6,7), (3,8)]

如何从此列表中的每个元组返回第二个值?

期望的输出:

[2, 3, 5, 4, 7, 7, 8]

6 个答案:

答案 0 :(得分:86)

使用list comprehension

[x[1] for x in L]

答案 1 :(得分:70)

伊格纳西奥的答案就是你想要的。但是,正如有人也在学习Python一样,让我试着为你解剖一下......如上所述,这是一个列表理解(例如,DiveIntoPython3所述)。以下是几点:

[x[1] for x in L]

  • 注意代码行周围的[]。这些是定义列表的内容。这告诉您此代码返回一个列表,因此它是list类型。因此,这种技术被称为“列表理解”。
  • L是您的原始列表。因此,您应该在执行上述代码之前定义L = [(1,2),(2,3),(4,5),(3,4),(6,7),(6,7),(3,8)]
  • x是一个仅存在于理解中的变量 - 尝试在理解之外访问x,或在执行上述行后键入type(x),它会告诉您{{ 1}},而NameError: name 'x' is not defined返回type(L)
  • <class 'list'>指向每个元组中的 second 项,而x[1]则指向每个第一项。
  • 因此,这行代码字面上写着“返回列表L中所有元组的元组中的第二项。”

在提出问题之前,很难说出你有多少尝试过问题,但也许你只是不熟悉理解?我会花一些时间阅读Chapter 3 of DiveIntoPython或任何有关理解的资源。祝你好运。

答案 2 :(得分:6)

列表理解绝对是这样做的方法。 应该更快的另一种方式是mapitemgetter

import operator

new_list = map(operator.itemgetter(1), old_list)

为了回应OP在谷歌上找不到答案的评论,我会指出一种超级天真的方式来做到这一点。

new_list = []
for item in old_list:
    new_list.append(item[1])

这使用:

  1. 声明变量以引用空列表。
  2. for for循环。
  3. 在列表中调用append方法。
  4. 如果有人试图学习某种语言并且不能将这些基本部分组合在一起,那么他们需要将其视为练习并自行完成,即使需要20个小时。

    需要学习如何思考自己想要的内容并将其与可用工具进行比较。我的第二个答案中的每个元素都应该包含在基础教程中。 如果没有阅读,您将无法学习编程。

答案 3 :(得分:1)

您还可以将序列拆包与zip一起使用:

L = [(1,2),(2,3),(4,5),(3,4),(6,7),(6,7),(3,8)]

_, res = zip(*L)

print(res)

# (2, 3, 5, 4, 7, 7, 8)

这还将根据丢弃的第一个元素创建一个元组_。仅提取第二个是可能的,但是更冗长:

from itertools import islice

res = next(islice(zip(*L), 1, None))

答案 4 :(得分:1)

或者您可以使用pandas

>>> import pandas as pd
>>> L = [(1,2),(2,3),(4,5),(3,4),(6,7),(6,7),(3,8)]
>>> df=pd.DataFrame(L)
>>> df[1]
0    2
1    3
2    5
3    4
4    7
5    7
6    8
Name: 1, dtype: int64
>>> df[1].tolist()
[2, 3, 5, 4, 7, 7, 8]
>>> 

numpy

>>> import numpy as np
>>> L = [(1,2),(2,3),(4,5),(3,4),(6,7),(6,7),(3,8)]
>>> arr=np.array(L)
>>> arr.T[1]
array([2, 3, 5, 4, 7, 7, 8])
>>> arr.T[1].tolist()
[2, 3, 5, 4, 7, 7, 8]
>>> 

答案 5 :(得分:0)

a = [(0,2), (4,3), (9,9), (10,-1)]
print(list(map(lambda item: item[1], a)))