Python中如何用最简单的方法实现list内的数值运算需求?
有这么一个字典,现在需要
把 height,y 分别乘以 1080,然后取整(应该需要四舍五入),
把 width,x分别乘以1920,然后取整(应该需要四舍五入),
最后放到一个 list 里边, 然后还需要做一个加法,有什么简单的办法吗,写 for 循环要 2 大坨,不甘心,看看万能的 v 友,有什么快速简单的方法没有
a = {'height': 0.724074, 'width': 0.226042, 'x': 0.295833, 'y': 0.275926}
最后输出一个:
[568, 298, 1002, 1080] # 顺序和数值有些变化 [x, y, x + width, y + height]
Python中如何用最简单的方法实现list内的数值运算需求?
总共就四个数值为什么要写 for 循环?直接列表推导式不就好了
# 最直接的方法:列表推导式配合标准运算符
numbers = [1, 2, 3, 4, 5]
# 1. 所有元素乘以2
doubled = [x * 2 for x in numbers]
print(doubled) # [2, 4, 6, 8, 10]
# 2. 所有元素加10
added = [x + 10 for x in numbers]
print(added) # [11, 12, 13, 14, 15]
# 3. 复杂运算:平方后减1
complex_calc = [x**2 - 1 for x in numbers]
print(complex_calc) # [0, 3, 8, 15, 24]
# 如果需要原地修改原列表
for i in range(len(numbers)):
numbers[i] = numbers[i] * 3 # 所有元素乘以3
print(numbers) # [3, 6, 9, 12, 15]
# 使用map函数(函数式编程风格)
def add_five(x):
return x + 5
result = list(map(add_five, [1, 2, 3]))
print(result) # [6, 7, 8]
# 或者用lambda表达式更简洁
result = list(map(lambda x: x * 2, [1, 2, 3]))
print(result) # [2, 4, 6]
列表推导式是最Pythonic的写法,一行搞定批量运算。
>>> k = numpy.array([[0,0,1920,0],[0,0,0,1080],[0,1920,1920,0],[1080,0,0,1080]])
>>> numpy.dot(k, numpy.array(list(a.values())).reshape(4,1))
from operator import mul
a = {‘height’: 0.724074, ‘width’: 0.226042, ‘x’: 0.295833, ‘y’: 0.275926}
b = {‘height’: 1080, ‘width’: 1920, ‘x’: 1920, ‘y’: 1080}
result = sum(map(lambda x: mul(*x), zip(a.values(), b.values())))
就四个数还折腾什么。
真够懒的,虽然是程序员三大美德之一吧,但是也得注意一下 kiss 原则
考虑到 dict 是无序的,获取的 values 不一定能一一对应上.
a = {‘height’: 0.724074, ‘width’: 0.226042, ‘x’: 0.295833, ‘y’: 0.275926}
b = {‘height’: 1080, ‘width’: 1920, ‘x’: 1920, ‘y’: 1080}
result = sum(list(value * b[key] for key,value in a.items()))
多谢,你这个办法真比我简单些,引入字典比,也是一绝啊,我把 int 换成 round 了,可以四舍五入
key:int(value * b[key])请教一下这个是什么意思啊,看不太懂
字典推导式


