我试图将字符串的值分配给不同的数组索引
但是我收到一个名为&#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]
答案 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]
将正确抛出错误,因为您尝试访问超出数组总长度的元素。
有两种方法可以解决这个问题:
append
。这将获取列表并通过函数调用中包含的元素进行扩展。除了最稀有的场合之外,这对所有人来说都是首选。 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