在元组列表中引用一个元素

25

提前道歉,我是Python新手。 我有一个元组(tuples)列表,我想知道如何引用列表中每个元组的第一个元素。 我认为应该像这样:

for i in number_of_tuples :
  first_element = myList[i[0]]

你知道 [列表元素[元组元素]] 吗?但是,这似乎不是正确的方法。非常感谢任何帮助。

谢谢,

特纳


1
我的列表[我][0]或更有趣的是:[i[0] for i in myList] - phkahler
8个回答

48
所有其他答案都是正确的,但是没有解释为什么你尝试的方法是错误的。当你使用 myList[i[0]] 时,你告诉Python i 是一个元组,并且你想要元组i 的第一个元素的值作为 myList 的索引。
在大多数编程语言中,当你需要访问嵌套数据类型(例如数组、列表或元组)时,你会使用方括号来获取最内层的项。第一个方括号给出了列表中元组的位置,第二个方括号给出了元组中项的位置。
下面是我想到的一个快速的基本示例:
info = [ ( 1, 2), (3, 4), (5, 6) ]

info[0][0] == 1
info[0][1] == 2
info[1][0] == 3
info[1][1] == 4
info[2][0] == 5
info[2][1] == 6

我想知道这个答案是否比列表推导式的答案具有更高的计算成本?后者肯定具有更高的内存成本! - Serge Stroobandt

31
你可以使用列表推导式来获取每个元组中的第一个元素列表:列表推导式
>>> my_tuples = [(1, 2, 3), ('a', 'b', 'c', 'd', 'e'), (True, False), 'qwerty']
>>> first_elts = [x[0] for x in my_tuples]
>>> first_elts
[1, 'a', True, 'q']

如果我想访问元组的所有元素,例如我有一个列表 = [(1,2), (3,4) ,(5,6)]。我想要获取1、2以及3、4等等,而不仅仅是第一个或最后一个元素。 - Liza
@Liza for x in my_tuples...?在Python编程中,这段代码表示使用for循环遍历名为my_tuples的元组。 - Matt Ball
https://dev59.com/fl4c5IYBdhLWcg3w3dZ_ - Francois

5
代码
my_list = [(1, 2), (3, 4), (5, 6)]
for t in my_list:
    print t

打印

(1, 2)
(3, 4)
(5, 6)

这个循环遍历了my_list,并将my_list的元素一个接一个地赋值给t。由于my_list的元素恰好是元组,所以t始终是一个元组。要访问元组t的第一个元素,请使用t[0]

for t in my_list:
    print t[0]

要访问列表中给定索引 i 处的元组的第一个元素,您可以使用: [i] [0]
print my_list[i][0]

这是针对Python 2的吗?如果是,那么是否有适用于Python 3的类似版本? - imantha
@imantha 这是Python 2。在Python 3中,只需使用括号调用print(),其他答案内容保持不变。 - Sven Marnach

4

您还可以使用itemgetter运算符:

from operator import itemgetter
my_tuples = [('c','r'), (2, 3), ('e'), (True, False),('text','sample')]
map(itemgetter(0), my_tuples)

3

不是:

first_element = myList[i[0]]

您可能需要:

first_element = myList[i][0]

1
这是一个快速的例子:

termList = []
termList.append(('term1', [1,2,3,4]))
termList.append(('term2', [5,6,7,8]))
termList.append(('term3', [9,10,11,12]))

result = [x[1] for x in termList if x[0] == 'term3']

print(result)

1
所以你有“一组元组”,让我假设你正在操作某个二维矩阵,在这种情况下,一个方便的接口来完成你需要的是 numpy 提供的。
假设你有一个数组 arr = numpy.array([[1, 2], [3, 4], [5, 6]]),你可以使用 arr[:, 0] 来获取所有“元组”中第一个元素的新数组。

0

通过我的方法,您无需导入任何模块,它更符合Python的风格,因为它使用Python的本地特性:

list_of_tuples = [('a1', 'b1','c1'), ('a2', 'b2','c2'), ('a3', 'b3','c3')]

print(list(map(lambda x: x[0], list_of_tuples)))
>> ['a1', 'a2', 'a3']

print(list(map(lambda x: x[2], list_of_tuples)))
>> ['c1', 'c2', 'c3']

通过遵循这个逻辑,您可以执行其他操作,例如从字典列表中获取特定项等。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接