如何将一个数字乘以元组列表 (python) 中的第二个值?

How to multiply a number by the second value in a list of tuples (python)?

我有一个元组列表,我的程序从这样开头的文档中读取:

(1914, 1.0)
(1915, 1.0)
(1916, 7.9)
(1917, 17.4)
(1918, 18.0)

我想做的是取第二个数字(浮点数)并将其乘以用户确定的另一个数字。例如,如果用户选择 14.4,程序会将 14.4*1.0、14.4*1.0、14.4*7.9、14.4*17.4、14.4*18.0 等相乘,然后将其添加到列表中。我试过了

[x*14.4 for x in t2[1]]

其中 t2 是元组,但显然这不起作用并给出类型错误“'float' 对象不可迭代。”我是 python 的新手,我不太确定该怎么做。

试试这个:

[x[1]*14.4 for x in t2]

鉴于:

LoT=[(1914, 1.0),
(1915, 1.0),
(1916, 7.9),
(1917, 17.4),
(1918, 18.0)]

由于元组是不可变的,您需要创建一个新的元组(如果您想要一个新的元组列表)。

>>> x=14.4
>>> [(t[0], t[1]*x) for t in LoT]
[(1914, 14.4), (1915, 14.4), (1916, 113.76), (1917, 250.55999999999997), (1918, 259.2)]

如果你只想得到元组第二个元素相乘的列表,你可以这样做:

>>> [t[1]*x for t in LoT]
[14.4, 14.4, 113.76, 250.55999999999997, 259.2]

您 post 表示:

What I'm trying to do is take the second number (the float) and multiply it by another number determined by the user.

这就是我使用 [t[1]*x for t in LoT] 的原因,因为 t[1] 是任何至少包含 2 个元素的元组的第二个元素。

如果保证每个元组都是两个元素长,你也可以对同一个列表做[y*x for _, y in LoT]

怎么样:

[y * 14.4 for x, y in tuples]
#!/usr/bin/env python3
import sys
mytup = (
    (1914, 1.0),
    (1915, 1.0),
    (1916, 7.9),
    (1917, 17.4),
    (1918, 18.0)
)
x = int(sys.argv[1])
print(['%0.2f' % (b*x) for a, b in mytup])

结果:

['3.00', '3.00', '23.70', '52.20', '54.00']

基本上这只是一个 closure/anon 函数来使用默认的生成器+迭代器,我假设这是你在阅读你的问题后想要的。