使用 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]
将正确地抛出错误,因为您正试图访问超出数组总长度的元素。
有两种方法可以解决这个问题:
- 使用
append
。这将获取列表并通过函数调用中包含的元素对其进行扩展。除了最罕见的场合,这是首选,imo。
- 明确定义一个空列表。这可以使用类似的东西来完成:
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
我正在尝试将字符串的值分配给不同的数组索引
但我收到一个名为 "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]
将正确地抛出错误,因为您正试图访问超出数组总长度的元素。
有两种方法可以解决这个问题:
- 使用
append
。这将获取列表并通过函数调用中包含的元素对其进行扩展。除了最罕见的场合,这是首选,imo。 - 明确定义一个空列表。这可以使用类似的东西来完成:
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