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内的数值运算需求?

11 回复

总共就四个数值为什么要写 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的写法,一行搞定批量运算。

列表推导也不好直接生成我想要的结果啊,只能取到 values, 再循环?

>>> 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()))

看来我理解错了你的加法~
a = {‘height’: 0.724074, ‘width’: 0.226042, ‘x’: 0.295833, ‘y’: 0.275926}
b = {‘height’: 1080, ‘width’: 1920, ‘x’: 1920, ‘y’: 1080}
d = {key:int(value * b[key]) for key,value in a.items()}
return [d[‘x’], d[‘y’], d[‘width’] + d[‘x’], d[‘height’] + d[‘y’]]

多谢,你这个办法真比我简单些,引入字典比,也是一绝啊,我把 int 换成 round 了,可以四舍五入

key:int(value * b[key])请教一下这个是什么意思啊,看不太懂

字典推导式

回到顶部