关于python:删除列表中的元组

Removing tuples in a list

我有这些清单:

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

我想在估价单上应用此代码:

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

但我收到了这个错误:

1
TypeError: can't multiply sequence by non-int of type 'tuple'

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

我的问题是,有没有办法把这些值从它们各自的元组中去掉,然后把它们变成一个列表

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

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

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


使

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

进入之内

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

我会用列表理解

1
valuelist = [x[0] for x in valuelist]

然后只是

1
2
import itertools
list(itertools.chain(*valuelist))


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

是一个整数列表:

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

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

因此:

1
2
3
>>> sqvaluelist = [x*x for x in valuelist]
>>> sqvaluelist
[110.25, 420.25, 462.25, 4900.0, 1190.25]


用Python的方式做:

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

< /块引用>< /块引用>


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

1
2
3
4
>>> 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]


是的,您可以很容易地在一行中做到这一点:

1
map(lambda x: x, valuelist)

这是因为正如@eumiro所指出的,(10.5)实际上是一个float,而不是一个tuple。元组为(10.5,)。

要计算平方,很容易:

1
map(lambda x: x*x, valuelist)

如果您有类似(10.5,)的实数元组列表,可以这样修改它:

1
2
map(lambda x: x[0], valuelist)
map(lambda x: x[0]*x[0], valuelist)