说我想在列表中找到所有值'6'并将其替换为值'600'。我可以使用 enumerate()完成此操作,但我认为这不是完成我想做的事情的好方法。我面临的问题是,我需要知道索引,才能用一个新值(即DATA [idx])替换该值。
DATA = [ 2,4,6,8,6,1,2,3,4,6]
for idx, val in enumerate(DATA):
if val == 6:
DATA[idx]=600
但是有替代的和/或更有效的方法吗?谢谢您的宝贵时间。
答案 0 :(得分:2)
我不确定“提高效率”是什么意思。您所能做的就是遍历数组并考虑每个值。您的代码可以充分做到这一点。我看不出有问题。
我可以想到许多其他方法来做到这一点。列表理解非常紧凑:
DATA = [600 if i == 6 else i for i in DATA]
这确实会创建一个新数组,因此可以说效率较低。我想不出一种更紧凑的方式来遍历列表并在其中更改条目。
答案 1 :(得分:1)
使用列表理解:
DATA = [2,4,6,8,6,1,2,3,4,6]
DATA = [600 if x == 6 else x for x in DATA]
print(DATA)
>> [2, 4, 600, 8, 600, 1, 2, 3, 4, 600]
编辑:根据要求-顺便说一句,我不确定这是否就是Python在后台实现它的方式,但这是一个愚蠢的理解版本:
>>>> DATA = [600 if x == 6 else x for x in DATA]
DATA2 = []
for x in DATA:
if x == 6:
DATA2.append(600)
else:
DATA2.append(x)
DATA = DATA2
del(DATA2)
答案 2 :(得分:0)
您可以将range
与len
一起使用:
for i in range(len(DATA)):
if DATA[i] == 6:
DATA[i] = 600
或切片分配:
DATA[:] = [600 if item == 6 else item for item in DATA]
enumerate
可能是最好的。
答案 3 :(得分:0)
对于您的任务,最好使用NumPy的boolean mask通过直观的命令进行非常快速便捷的就地替换
data[data == 6] = 600
完整代码:
import numpy as np # pip install numpy
DATA = [ 2,4,6,8,6,1,2,3,4,6]
data = np.array(DATA) # converting to a NumPy array
data[data == 6] = 600 # data == 6 is a boolean mask; it is written in [] as an index
print(data)
的输出:
[ 2 4 600 8 600 1 2 3 4 600]
注1:
如果您需要将生成的NumPy数组转换回Python列表,请使用data = list(data)
:
[2, 4, 600, 8, 600, 1, 2, 3, 4, 600]
注释2:
将名称DATA
(全部大写)用于以后将要更改的内容会造成混淆-
参见PEP 8 - Style Guide for Python Code和其中的部分Constants。