2024-04-25 17:59:38 发布
网友
在其他语言(如javascript)中,当向索引范围之外的数组添加值时,将使用未定义的值“扩展”数组,直到指定的索引。你知道吗
示例:
var arr = [1,2,3] arr[4] = 4 console.log(arr) // [1,2,3,undefined,4]
当我在Python中尝试这样做时,我得到了一个列表赋值索引超出范围的错误。你知道吗
在Python中有没有同样的方法?你知道吗
您可以将list子类化并重写__setitem__方法,以便它根据给定索引的要求扩展列表,该索引也可以是slice对象,在这种情况下,应该使用切片的start和stop属性中的较大者:
list
__setitem__
slice
start
stop
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项。你知道吗
5
你是说
my_list = [1, 2, 3, 4] my_list.append(None) my_list.append(5)
结果:[1,2,3,4,无,5]
??? 我可能误解了这个问题,但是
您可以将
list
子类化并重写__setitem__
方法,以便它根据给定索引的要求扩展列表,该索引也可以是slice
对象,在这种情况下,应该使用切片的start
和stop
属性中的较大者:以便:
输出:
请注意,问题中的预期输出是不正确的,因为
5
的索引实际上指的是列表中的第6项,而不是第5项。你知道吗你是说
结果:[1,2,3,4,无,5]
??? 我可能误解了这个问题,但是
相关问题 更多 >
编程相关推荐