0

我有这些清单:

sqvaluelist = []
valuelist = [(10.5,), (20.5,), (21.5,), (70.0,), (34.5,)]

我想将此代码应用于值列表:

for value in valuelist:
    valuesquared = value*value
    sqvaluelist.append(valuesquared,)

但我收到了这个错误:

TypeError:不能将序列乘以“元组”类型的非整数

我想我知道这个错误背后的原因,因为每个值都在一个单独的元组中。

我的问题是,有什么方法可以将这些值从它们各自的元组中取出,然后将它们变成一个列表,例如

valuelist = [10.5, 20.5, 21.5, 70.0, 34.5]

无需手动编辑现有列表的结构以便可以执行 for 循环?

编辑:我道歉!它们实际上是元组!在每个值后添加逗号。对不起!

4

6 回答 6

6

那么就

import itertools
list(itertools.chain(*valuelist))
于 2012-04-15T07:01:58.277 回答
6

valuelist = [(10.5,), (20.5,), (21.5,), (70.0,), (34.5,)]

进入

valuelist = [10.5, 20.5, 21.5, 70.0, 34.5]

我会使用列表理解

valuelist = [x[0] for x in valuelist]
于 2012-04-15T07:03:41.557 回答
3
valuelist = [(10.5), (20.5), (21.5), (70.0), (34.5)]

是一个整数列表:

>>> [(10.5), (20.5), (21.5), (70.0), (34.5)]
[10.5, 20.5, 21.5, 70.0, 34.5]

(10.5)是一个整数。(10.5,)是一个整数的元组。

所以:

>>> sqvaluelist = [x*x for x in valuelist]
>>> sqvaluelist
[110.25, 420.25, 462.25, 4900.0, 1190.25]
于 2012-04-15T06:41:22.660 回答
1

只需访问每个元组的第一个元素:

>>> valuelist = [(10.5,), (20.5,), (21.5,), (70.0,), (34.5,)]
>>> sqvaluelist = [x[0]*x[0] for x in valuelist]
>>> sqvaluelist
[110.25, 420.25, 462.25, 4900.0, 1190.25]
于 2012-04-15T06:53:05.557 回答
1

是的,您可以在一个班轮中非常轻松地做到这一点:

map(lambda x: x, valuelist)

这是有效的,因为正如@eumiro 所指出的, (10.5) 实际上是一个浮点数而不是一个元组。元组将是 (10.5,)。

要计算平方很容易:

map(lambda x: x*x, valuelist)

如果你有一个像 (10.5,) 这样的真实元组列表,你可以像这样修改它:

map(lambda x: x[0], valuelist)
map(lambda x: x[0]*x[0], valuelist)
于 2012-04-15T06:35:14.093 回答
1

以pythonic方式进行:

sqvaluelist = [v[0]**2 for v in valuelist]

于 2018-12-03T07:56:14.770 回答