在Python 3.1中修改特定的数组元素

时间:2011-01-22 09:20:24

标签: python list

我有两个数组: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中的下一个元素1}}再次开始检查过程。

5 个答案:

答案 0 :(得分: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))

答案 1 :(得分: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)

答案 2 :(得分:1)

使用布尔值跟踪是否找到匹配项,在每个内部循环之前设置为False并在True内设置为if。每次迭代后,如果它仍然是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))

如果您打算使用in代替==,还可以使用is大大缩短此代码:

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

答案 3 :(得分:0)

为什么不这样:

least_common_set = frozenset(x[0] for x in least_common)
for e in array:
    if e is not in least_common_set:
        new_array.append(e + (e * (mod[1]/100)))

答案 4 :(得分:0)

如果我理解你的问题,这是一个可能的解决方案:

for e in array:
    for lc in least_common:
        if e is lc[0]:
            new_array.append(e + e * (md[1] / 100))
            break
    else:
        new_array.append(e)
{> 1}}循环中的

The else clause在循环因列表耗尽而终止时执行,但是当循环被for语句终止时不执行。

请注意,不需要使用breakrange,在Python中您只需迭代序列的元素而不涉及索引 - 您可以使用len,但在这种情况下你不需要。另外,请不要为变量使用enumerate等内置名称:在这里,我已重命名您的词典mod