【发布时间】:2011-06-15 14:35:44
【问题描述】:
[(1,2), (2,3), (4,5), (3,4), (6,7), (6,7), (3,8)]
如何从这个列表中的每个元组返回第二个值?
期望的输出:
[2, 3, 5, 4, 7, 7, 8]
【问题讨论】:
[(1,2), (2,3), (4,5), (3,4), (6,7), (6,7), (3,8)]
如何从这个列表中的每个元组返回第二个值?
期望的输出:
[2, 3, 5, 4, 7, 7, 8]
【问题讨论】:
[x[1] for x in L]
【讨论】:
伊格纳西奥的答案就是你想要的。然而,作为一个也在学习 Python 的人,让我试着为你剖析一下……如前所述,它是一个列表推导(例如,在 DiveIntoPython3 中介绍)。这里有几点:
[x[1] for x in L]
[]。这些是定义列表的内容。这告诉您此代码返回一个列表,因此它是list 类型。因此,这种技术被称为“列表推导”。L = [(1,2),(2,3),(4,5),(3,4),(6,7),(6,7),(3,8)]。x 是一个只存在于理解中的变量 - 尝试在理解之外访问x,或者在执行上述行后输入type(x),它会告诉你NameError: name 'x' is not defined,而type(L) 返回@987654332 @。x[1] 指向每个元组中的第二个 项,而x[0] 将指向第一个项中的每一个。在提出问题之前很难说出您尝试了多少问题,但也许您只是不熟悉理解?我会花一些时间阅读Chapter 3 of DiveIntoPython,或任何有关理解的资源。祝你好运。
【讨论】:
x 将存在于 LC 之外,最后一个值绑定到它。这在 3.x 中已修复。
[x[1] for x in [(1,2),(2,3),(4,5),(3,4),(6,7),(6,7),(3,8)]],但这并不容易。
列表推导式绝对是做到这一点的方法。另一种应该更快的方法是map 和itemgetter。
import operator
new_list = map(operator.itemgetter(1), old_list)
针对 OP 无法在 google 上找到答案的评论,我将指出一种超级幼稚的方法。
new_list = []
for item in old_list:
new_list.append(item[1])
这个用途:
append 方法。如果有人尝试学习一门语言,但自己无法将这些基本部分组合在一起,那么他们需要将其视为一种练习并自己完成,即使这需要 20 小时。
人们需要学习如何思考自己想要什么并将其与可用工具进行比较。我的第二个答案中的每个元素都应包含在基本教程中。 不读书就无法学习编程。
【讨论】:
您还可以通过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))
【讨论】:
或者你可以使用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]
>>>
【讨论】:
a = [(0,2), (4,3), (9,9), (10,-1)]
print(list(map(lambda item: item[1], a)))
【讨论】: