如何在列表中比较元组中的值

2024-06-14 06:30:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我只是想知道如何从元组列表中的元组中获取特定值。在

例如,假设我有一个元组列表:

list = [(12345, 6789, 23456), (156748, 347890, 1234556), (1009544, 13578690, 1223455), ....]

列表中有128个元组,每个元组有三个任意大的值。在

我需要做的是从每个元组中获取第三个值,因为我需要对每对元组使用这些值并找到它们的最大公约数。在

例如,我需要从元组1获取23456,从元组2获取1234556并找到它们的gcd,然后我需要对元组2和3执行相同的操作,等等。。在

这一点我可以做,但是我有点困惑我将如何从列表中获得每个元组的第三个值。在

我知道如果它只是一个列表,我可以简单地调用list[3*m],其中m在1到128的范围内。在

得到3的倍数的所有位置的数字,我可以对元组做同样的处理。但我不知道如何对元组列表执行此操作。在

抱歉,如果这有点混乱。我尽力解释。在

我不是要代码或任何东西,只是解释一下如何在列表中所有元组的某个位置找到值。在


Tags: 代码列表数字list元组倍数gcd最大公约数
3条回答

您可以使用以下方法获取成对的值来计算GCD值:

def calc_gcd(v1, v2):
    print v1, v2        # add your GCD code here

list_of_tuples = [(12345, 6789, 23456), (156748, 347890, 1234556), (1009544, 13578690, 1223455), (12345, 6789, 23456)]

for p1, p2 in zip(list_of_tuples[:-1], list_of_tuples[1:]):
    calc_gcd(p1[2], p2[2])

这将显示以下输出:

^{pr2}$

然后可以编写calc_gcd函数来显示您想要的结果。注意,不要使用list作为变量名,因为它会影响Python自己的list函数。在

这是怎么回事?这里的zip函数取两个列表,对于循环的每次迭代,它都从每个列表返回一个项。诀窍是给它两次元组列表,一个从开头开始,第二个从第二个条目开始,这样就可以得到连续的条目对返回。在

因此p1是一个元组,p2是一个元组,它将每个元组的第三个值传递给gcd函数,注意Python从0开始编号,所以第三个条目的索引是2。在

要创建对的列表,可以使用Pythonlist comprehension来构建列表,如下所示:

pairs = [(p1[2], p2[2]) for p1, p2 in zip(list_of_tuples[:-1], list_of_tuples[1:])]

for v1, v2 in pairs:
    calc_gcd(v1, v2)

pairs将包含:

[(23456, 1234556), (1234556, 1223455), (1223455, 23456)]

你可以通过列表理解来实现这一点,比如:

x = [(12345, 6789, 23456), (156748, 347890, 1234556), (1009544, 13578690, 1223455)]

[t[2] for t in x]

[23456, 1234556, 1223455]

您只需将索引传递给元组,方法是使用列表:

>>> list[0][2]
23456
>>> list[1][2]
1234556

请参见示例a tutorial about tuples。在

然后,您可以循环列表,并将一个元组的第三项与第二个元组的第三项进行比较:

^{pr2}$

相关问题 更多 >