Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python3中超出范围的索引处向列表添加元素_Python_Arrays_List - Fatal编程技术网

在Python3中超出范围的索引处向列表添加元素

在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

在其他语言(如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.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
)。索引编制得很好,我解决了我的问题索引编制得很好,我解决了我的问题