访问列表中元组中的值
- 2025-04-17 09:02:00
- admin 原创
- 17
问题描述:
[(1,2), (2,3), (4,5), (3,4), (6,7), (6,7), (3,8)]
如何返回此列表内每个元组的第二个值?
期望输出:
[2, 3, 5, 4, 7, 7, 8]
解决方案 1:
具有列表理解。
[x[1] for x in L]
解决方案 2:
Ignacio 的答案正是你想要的。不过,作为一个也在学习 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)
在执行上述行后输入,它会告诉你NameError: name 'x' is not defined
,而type(L)
返回<class 'list'>
。x[1]
指向每个元组中的第二个x[0]
项,而指向每个第一个项。因此,这行代码的字面意思是“返回列表 L 中所有元组的元组中的第二个项目”。
很难说你在提问之前尝试过多少次,但也许你只是不熟悉推导式?我会花点时间读一读《DiveIntoPython》的第三章,或者任何关于推导式的资源。祝你好运。
解决方案 3:
列表推导式绝对是实现此目的的最佳方法。另一种应该更快的方法是map
和itemgetter
。
import operator
new_list = map(operator.itemgetter(1), old_list)
针对 OP 无法在谷歌上找到答案的评论,我将指出一种非常简单的方法。
new_list = []
for item in old_list:
new_list.append(item[1])
这使用:
声明一个变量来引用一个空列表。
for 循环。
append
在列表上调用方法。
如果有人试图学习一门语言,但无法自己掌握这些基本知识,那么他们需要将其视为一项练习,并自己完成,即使需要花费二十个小时。
一个人需要学会思考自己想要什么,并将其与可用的工具进行比较。我的第二个答案中的每个元素都应该在基础教程中涵盖。不读一本教程,你就学不会编程。
解决方案 4:
您还可以使用序列解包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))
解决方案 5:
或者您可以使用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]
>>>
解决方案 6:
a = [(0,2), (4,3), (9,9), (10,-1)]
print(list(map(lambda item: item[1], a)))
扫码咨询,免费领取项目管理大礼包!