[英]Accessing a value in a tuple that is in a list
[(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]
Ignacio 的答案正是您想要的。 然而,作为一个也在学习 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
之外访问x
,或在执行上述行后键入type(x)
,它会告诉您NameError: name 'x' is not defined
,而type(L)
返回<class 'list'>
。x[1]
指向每个元组中的第二个项目,而x[0]
将指向每个第一个项目。在提出问题之前很难判断您尝试了多少问题,但也许您只是不熟悉理解? 我会花一些时间阅读DiveIntoPython 的第 3 章,或任何有关理解的资源。 祝你好运。
列表理解绝对是做到这一点的方法。 另一种应该更快的方法是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
方法。如果有人正在尝试学习一门语言并且不能为自己整理这些基本部分,那么他们需要将其视为练习并自己做,即使需要二十个小时。
人们需要学习如何思考自己想要什么,并将其与可用工具进行比较。 我的第二个答案中的每个元素都应该包含在基本教程中。 不阅读一本就无法学习编程。
您还可以使用带有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)))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.