繁体   English   中英

基于条件将循环的元素设置为常量的pythonic方法

[英]pythonic way to set the elements of a loop to a constant based on a condition

是否有可能为必须在列表元素中循环并根据条件将它们设置为某个常数的东西编写一个不错的Pythonic单行代码?

这是我当前的实现形式:

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

我知道您也可以在for循环内使用常规的if语句,但是我对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]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM