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

2024-03-28 23:22:42 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有可能写一个很好的,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提供的所有内容都相当陌生,我正在寻找更好的东西。你知道吗

注意:我想修改原始数组,而不是创建新数组(例如,通过列表理解创建新列表时,与修改原始数组相比,应该增加一些(尽管可能非常小)开销)


Tags: 代码in元素列表forlenifvar
3条回答

你可以做:

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

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

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

使用^{}可以使用index masks

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

相关问题 更多 >