我有这些清单:
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循环?
编辑:我道歉!他们实际上是元组!在每个值后添加逗号。遗憾!答案 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]