#python-3.x #list #element
#python-3.x #Список #элемент
Вопрос:
У меня есть список 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
имеют одинаковый размер. Итак, мысли? Не должно ли поэлементное вычитание быть довольно простым?
Ответ №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. ffs итак, все, что мне нужно было сделать, это использовать numpy
Ответ №2:
Вы можете сделать это:
decay_positions = [0.2, 3, 0.5, 5, 1, 7, 1.5, 8]
result = [2-t for t in decay_positions]
print(result)
Ответ №3:
Попробуйте
decay_positions = [0.2, 3, 0.5, 5, 1, 7, 1.5, 8]
new_decay_positions = [2-pos for pos in decay_positions ]
Ответ №4:
Я просто хочу добавить, что если вы хотите изменить список на месте, вы можете сделать
decay_positions = [0.2, 3, 0.5, 5, 1, 7, 1.5, 8]
decay_positions[:] = (2 - it for it in decay_positions)
print(decay_positions)