如何访问成对列表中每对的元素?

44 投票
6 回答
179431 浏览
提问于 2025-04-17 22:55

我有一个叫做 pairs 的列表。

pairs = [("a", 1), ("b", 2), ("c", 3)]

我可以这样访问里面的元素:

for x in pairs:
    print x

这样会输出类似下面的内容:

('a', 1) ('b', 2) ('c', 3)

但是我想像在 C++ 中那样,访问每一对中的每个元素。在 C++ 中,如果我们使用 pair<string, int>,我们可以通过 x.firstx.second 来访问第一个元素和第二个元素。例如:

x = make_pair("a",1)
x.first= 'a'
x.second= 1

我该如何在 Python 中做到这一点呢?

6 个回答

2

我觉得你可能不太喜欢,但我为Python做了一个配对(pair)功能 :) 使用起来和C++有点像。

pair = Pair
pair.make_pair(value1, value2)

或者

pair = Pair(value1, value2)

这是源代码,pair_stl_for_python

2

当你写 pair[0] 的时候,你得到的是 ("a", 1)。括号里的东西叫做元组,元组和列表一样,都是用来存放多个数据的集合。所以你可以通过在它的名字后面加上 [0][1] 来访问这个元组里的第一个或第二个元素。要获取 pair 中第一个元素的第一个值,你只需要写 pair[0][0]。如果你想要第三个元素的第二个值,那就是 pair[2][1]

13

一个 2-tuple 就是一对东西。你可以这样访问它的第一个和第二个元素:

x = ('a', 1) # make a pair
x[0] # access 'a'
x[1] # access 1
16

如果你想使用名字来表示数据,可以试试用命名元组(namedtuple):

from collections import namedtuple

Pair = namedtuple("Pair", ["first", "second"])

pairs = [Pair("a", 1), Pair("b", 2), Pair("c", 3)]

for pair in pairs:
    print("First = {}, second = {}".format(pair.first, pair.second))
49

使用元组解包:

>>> pairs = [("a", 1), ("b", 2), ("c", 3)]
>>> for a, b in pairs:
...    print a, b
... 
a 1
b 2
c 3

另请查看:在for循环中的元组解包

撰写回答