在Python3中超出范围的索引处向列表添加元素
在其他语言(如javascript)中,当向索引范围之外的数组添加值时,将使用未定义的值“扩展”数组,直到指定的索引 例如:在Python3中超出范围的索引处向列表添加元素,python,arrays,list,Python,Arrays,List,在其他语言(如javascript)中,当向索引范围之外的数组添加值时,将使用未定义的值“扩展”数组,直到指定的索引 例如: var arr = [1,2,3] arr[4] = 4 console.log(arr) // [1,2,3,undefined,4] 当我尝试在Python中执行此操作时,会得到一个列表分配索引超出范围的错误 在Python中有没有做同样事情的方法?你是说 my_list = [1, 2, 3, 4] my_list.append(None) my_list.app
var arr = [1,2,3]
arr[4] = 4
console.log(arr) // [1,2,3,undefined,4]
当我尝试在Python中执行此操作时,会得到一个列表分配索引超出范围的错误
在Python中有没有做同样事情的方法?你是说
my_list = [1, 2, 3, 4]
my_list.append(None)
my_list.append(5)
结果:[1,2,3,4,无,5]
???
我可能误解了这个问题,但是你是说
my_list = [1, 2, 3, 4]
my_list.append(None)
my_list.append(5)
结果:[1,2,3,4,无,5]
???
我可能误解了这个问题,但是您可以对
列表
进行子类化,并重写\uuuu setitem\uuuuu
方法,以便它根据给定索引的要求扩展列表,该索引也可以是切片
对象,在这种情况下,应使用切片的开始
和停止
属性中的较大者:
class List(list):
def __setitem__(self, index, value):
self.extend([None] * ((max(index.start, index.stop - 1) if isinstance(index, slice) else index) - len(self) + 1))
super().__setitem__(index, value)
以便:
arr = List((1, 2, 3))
arr[5] = 5
print(arr)
arr[7:9] = [4, 5]
print(arr)
产出:
[1, 2, 3, None, None, 5]
[1, 2, 3, None, None, 5, None, 4, 5]
请注意,问题中的预期输出不正确,因为
5
的索引实际上指的是列表中的第6项,而不是第5项。您可以将list
子类化,并重写\u setitem\u
方法,以便按照给定索引的要求扩展列表,也可以是切片
对象,在这种情况下,应使用切片的开始
和停止
属性中的较大者:
class List(list):
def __setitem__(self, index, value):
self.extend([None] * ((max(index.start, index.stop - 1) if isinstance(index, slice) else index) - len(self) + 1))
super().__setitem__(index, value)
以便:
arr = List((1, 2, 3))
arr[5] = 5
print(arr)
arr[7:9] = [4, 5]
print(arr)
产出:
[1, 2, 3, None, None, 5]
[1, 2, 3, None, None, 5, None, 4, 5]
请注意,您的问题中的预期输出是不正确的,因为
5
的索引实际上指的是列表中的第6项,而不是第5项。我认为它更类似于字典,即d={5:5}
如果您的意图是从整数到整数的映射,最好使用一个列表。字典键可以是整数,您可以随意分配给任何键(d[9000]=5
)。我认为它更类似于字典,即d={5:5}
,如果您想要从整数映射到整数,最好使用一个列表。字典键可以是整数,您可以随意分配给任何键(d[9000]=5
)。索引编制得很好,我解决了我的问题索引编制得很好,我解决了我的问题