删除列表中的元组

时间:2012-04-15 06:32:58

标签: python

我有这些清单:

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

我想在评估主管上应用此代码:

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

但我收到了这个错误:

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

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

我的问题是,有什么方法可以将这些值从各自的元组中删除,然后将它们转换为像

这样的列表
valuelist = [10.5, 20.5, 21.5, 70.0, 34.5]

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

编辑:我道歉!他们实际上是元组!在每个值后添加逗号。遗憾!

6 个答案:

答案 0 :(得分:6)

然后只是

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

答案 1 :(得分: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]

答案 2 :(得分: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]

答案 3 :(得分: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)

答案 4 :(得分: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]

答案 5 :(得分:1)

以pythonic方式进行操作:

  
    
      

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