使用for循环Python将值赋给数组

时间:2015-01-03 23:47:24

标签: python arrays for-loop variable-assignment

我试图将字符串的值分配给不同的数组索引

但是我收到一个名为&#34的错误;列表分配超出范围"

uuidVal = ""
distVal = ""
uuidArray = []
distArray = []

for i in range(len(returnedList)):
     for beacon in returnedList:
            uuidVal= uuidVal+beacon[:+2]
            uuidArray[i]= uuidVal
            distVal= distVal+beacon[-2:]
            distArray[i]= distVal
            uuidVal=""
            disVal=""

我尝试使用

distArray[i].append(distVal)

而不是

distArray[i]= distVal

但它给出了一个错误,称为"列表索引超出范围"

使用

distArray.append(distVal)

使它工作没有错误,但结果是错误的

因为它会将新指定的值与下一个索引中的旧值连接起来

它应该如何运作:

returnList [' 52:33:42:40:94:10:19,-60' ' 22:34:42:24 :89:70:89,-90' ' 77:77:98:54:81:23:71,-81' ]

每次迭代时,它将第一个赋值给 uuidVal (例如:52,22,87) 最后两个字符到 distVal (例如:60,90,81)

最后 uuidArray 应该有这些值 [52,22,87]

distArray 应该具有以下值 [60,90,81]

注意:使用 .append 连接值,例如,如果与 distArray 一起使用,例如 distArray.append(distVal)< / strong>这些值将是这样的 [60,6090,609081]

4 个答案:

答案 0 :(得分:6)

是的,您将获得超出范围的错误列表索引:

distArray[i] = distVal

您正在访问尚未创建的索引

让我们看看这个演示:

>>> a=[]   # my list is empty 
>>> a[2]    # i am trying to access the value at index 2, its actually not present
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range

你的代码应该是这样的:

uuidArray = []
distArray = []
distVal = ""
for beacon in returnedList:
        uuidArray.append(beacon[:2])
        distval += beacon[-2:]
        distArray.append(distVal)

输出将是uudiArray:[&#39; 52&#39;,&#39; 22&#39;,&#39; 87&#39;]和distArray:[&#39; 60&#39;,& #39; 6090&#39;,&#39; 609081&#39;]

答案 1 :(得分:1)

将distArray定义为: distArray = []

您正在初始化包含0个元素的列表,因此distArray[2]将正确抛出错误,因为您尝试访问超出数组总长度的元素。

有两种方法可以解决这个问题:

  1. 使用append。这将获取列表并通过函数调用中包含的元素进行扩展。除了最稀有的场合之外,这对所有人来说都是首选。
  2. 明确定义一个空列表。这可以通过以下方式完成: distArray = [0]*num_elements,其中num_elements是您想要拥有的元素数量。这将创建一个大小为num_elements的列表,全部等于0.

答案 2 :(得分:0)

其他人已经解释了这个错误,所以我将把我的2c放在如何解决这个问题上。首先,您可以使用纯Python:

distArray = [None for _ in xrange(max_value+1)]

我正在使用None-type对象来分配数组(而许多人更喜欢零),因为它们不能被解释为整数或bool。

如果您的进程将是RAM密集型的,那么最好使用numpy数组。并且有一种在numpy中创建空数组的高效方法。

import numpy as np

distArray = np.empty(max_value+1, dtype=str)

请注意,您应手动选择数据类型。

您要实现的目标基本上是简化的哈希映射/表。如果您不确定最大值,可以考虑编写自己的“动态”数组,如果在其边界外调用,则会增加大小,而不是引发错误。

class DistArray():
    def __init__(self, starting_size):
        self.arr = [None for _ in xrange(starting_size)]

    def __getitem__(self, i):
        return self.arr[i]

    def __iter__(self):
        return iter(self.arr)

    def insert_item(self, item, value):
            try:
                self.arr[value] = item
            except:
                self.arr.extend([None for _ in xrange(value - len(self.arr))])
                self.arr[value] = item

这件事会适应你的需要。

distArray = DistArray(starting_size)
distArray.insert_item(string, value)

答案 3 :(得分:0)

Ebyte ttl-1w-433