在Python 3中修改特定数组元素

1 投票
5 回答
647 浏览
提问于 2025-04-16 10:25

我有两个数组:arrayleast_common(过滤数组)

下面的代码会遍历 array,检查里面的元素是否和 least_common 中的元素匹配。如果找到了匹配的元素,就会对它进行修改,然后把它添加到一个新的数组中。

 for i in range (len(array)):
        for j in range(len(least_common)):
            if array[i] is least_common[j][0]:                
                new_array.append ((array[i]) + (array[i] * (mod[1]/100)))

但是,如果 array 中的元素没有和 least_common 中的任何元素匹配,我想把这个元素直接添加到 new_array 中,然后继续检查 array 中的下一个元素,重新开始检查的过程。

5 个回答

1

在每次内层循环之前,先用一个布尔值来记录你是否找到匹配项,初始值设为 False。如果在 if 语句中找到了匹配,就把这个值改为 True。每次循环结束后,如果这个值还是 False,那就说明没有找到匹配项,这时候你可以进行添加操作。

你还应该听从 @Andrew 的建议,用 for a in array: 来遍历列表。如果你需要索引,可以用 for i, a in enumerate(array):。另外,要注意 is== 是不同的。

new_array = []
for array_item in array:
    found = False
    for least_common_item in least_common:
        if array_item is least_common_item:
            found = True
    if not found:
        new_array.append (array_item * (1 + mod[1]/100))

如果你想用 == 而不是 is,可以用 in 来大大简化这段代码:

for array_item in array:
    if array_item not in least_common:
        new_array.append (array_item * (1 + mod[1]/100))
3

在Python中,你想做的事情是用列表来实现的。还有一种叫做数组的数据类型,但它的用途完全不同。请不要搞混了,记得用正确的术语,叫做列表。

列表是可以逐个访问的。你需要注意不要超出列表的范围去索引元素,然后再用索引来访问它们。这种做法是C或C++的方式,而不是Python的做法。

你在原来的代码中使用了一个叫mod的列表或字典。覆盖内置名称是个坏主意。我试着理解你想要做的事情,写出了以下代码。你可以在此基础上继续发展,但在此之前,我觉得一些初学者的教程可能会对你有帮助。

new_array = []
somevalue = 0.001

for elem in array:
   for anotherelem in least_common:
            if elem == anotherelem[0]:
                    new_array.append(elem + (elem * somevalue))
3

这段代码对我来说有点奇怪——我觉得你应该从更简单的东西开始,比如:

lookup = set([x[0] for x in least_common])
new_array = []
for elem in array:
    if elem in lookup:
        new_array.append(elem + (elem * (mod[1]/100)))
    else:
        new_array.append(elem)

撰写回答