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] |
因此:
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)