根据条件,将循环元素设置为常数的Pythonic方法



是否有可能为某些列表元素循环并根据条件将它们设置为某个常数的东西写一个漂亮的Pythonic单线线?

这是我当前的实现的样子:

var = [1,2,3,4]
for i in range(len(var)):
    var[i] = 0 if var[i] <= 0 else var[i]

我知道,您也可以在循环内部使用普通的静态,但我不熟悉Python所提供的一切,并且正在寻找更好的东西。

注意:我想修改原始数组,而不是创建一个新数组(例如,通过列表理解而不是修改原始数组时,应该添加一些(尽管也许很小(的开销(尽管也许很小((

您可以做:

var = [max(i,0) for i in var]

使用numpy您可以使用索引掩码:

var = numpy.array([...])
var[var < 0] = 0

您可以使用列表理解并检查每个元素:

var = [1,2,-3,4]
var = [(i if i > 0 else 0) for i in var]
print(var) # [1, 2, 0, 4]

只是为了好玩

import timeit
print( timeit.timeit( "[(i if i > 0 else 0) for i in var]", setup="var = [1,2,-3,4]", number=1000000 ) )
# 0.6322694380378722
print( timeit.timeit( "[0 if item < 0 else item for item in var]", setup="var = [1,2,-3,4]", number=1000000 ) )
# 0.6328021787321703
print( timeit.timeit( "[max(i,0) for i in var]", setup="var = [1,2,-3,4]", number=1000000 ) )
# 1.4293624092194928

您可以多种方式进行操作,这就是其中之一:

var = [0 if item < 0 else item for item in var]

最新更新