在Python 3中修改特定数组元素
我有两个数组:array
和 least_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)