Python:常数减去列表元素以返回列表

时间:2019-03-28 15:41:29

标签: python-3.x list element

我有一个列表decay_positions = [0.2, 3, 0.5, 5, 1, 7, 1.5, 8],我想要一个这样的列表

new_position = 2 - decay_positions

基本上,我想要一个新列表,该列表的元素等于2,并减去decay_positions的元素 但是,当我这样做时:

decay_positions = [0.2, 3, 0.5, 5, 1, 7, 1.5, 8]
print(2 - decay_positions)

我明白了

TypeError: unsupported operand type(s) for -: 'int' and 'list'

所以我想也许如果尺寸不同,您可以减去。所以我做到了

decay_positions = [0.2, 3, 0.5, 5, 1, 7, 1.5, 8]
print([2]*len(decay_positions) - decay_positions)

但它仍然给出TypeError: unsupported operand type(s) for -: 'int' and 'list'

尽管[2]*len(decay_positions)decay_positions具有相同的大小。有什么想法吗?逐元素减法不应该很简单吗?

3 个答案:

答案 0 :(得分:1)

使用numpy ftw:

>>> import numpy as np
>>> decay_positions = np.array([0.2, 3, 0.5, 5, 1, 7, 1.5, 8])
>>> 2 - decay_positions
array([ 1.8, -1. ,  1.5, -3. ,  1. , -5. ,  0.5, -6. ])

如果出于某种原因鄙视numpy,则始终可以将列表推导用作辅助选项:

>>> [2-dp for dp in [0.2, 3, 0.5, 5, 1, 7, 1.5, 8]]
[1.8, -1, 1.5, -3, 1, -5, 0.5, -6]

答案 1 :(得分:0)

您可以这样做:

decay_positions = [0.2, 3, 0.5, 5, 1, 7, 1.5, 8]
result = [2-t for t in decay_positions]
print(result)

答案 2 :(得分:0)

尝试

decay_positions = [0.2, 3, 0.5, 5, 1, 7, 1.5, 8]
new_decay_positions = [2-pos for pos in decay_positions ]