使用 for 循环为数组赋值 Python

Assigning Values to an Array with for Loop Python

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

但我收到一个名为 "list assignment out of range"

的错误
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

但它给出了一个名为 "list index out of range"

的错误

使用

distArray.append(distVal)

让它正常工作但结果是错误的

因为它在下一个索引中不断将新分配的值与旧值连接起来

它应该如何工作:

returnedList['52:33:42:40:94:10:19, -60', '22:34:42:24: 89:70:89,-90''87: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) 值将像这样 [60, 6090, 609081]

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

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: ['52', '22', '87'] 和 distArray: ['60', '6090', '609081']

当您将 distArray 定义为: distArray = []

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

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

  1. 使用append。这将获取列表并通过函数调用中包含的元素对其进行扩展。除了最罕见的场合,这是首选,imo。
  2. 明确定义一个空列表。这可以使用类似的东西来完成: distArray = [0]*num_elements,其中 num_elements 是您想要的元素数。这将创建一个大小为 num_elements 且全部等于 0 的列表。

其他人已经解释了这个错误,所以我只留下我的 2c 如何解决这个问题。首先你可以使用纯 Python:

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

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

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

import numpy as np

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

请注意,您应该手动 select 一种数据类型。

您要实现的基本上是一个简化的 hash-map/table。如果您不确定最大值,您可以考虑编写自己的 'dynamic' 数组,如果在其边界外调用,它的大小会增加,而不是引发错误。

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)
def array():
    a = []
    size = int(input("Enter the size of array: "))

    for i in range(size):
        b = int(input("enter array element: "))
        a.append(b)
    return a