如何更改python列表索引的语法?
在询问之后,它收到了一条评论,关于你如何能做这样的事情:如何更改python列表索引的语法?,python,list,python-3.x,syntax,indexing,Python,List,Python 3.x,Syntax,Indexing,在询问之后,它收到了一条评论,关于你如何能做这样的事情: >>> def a(n): print(n) return a >>> b = a(3)(4)(5) 3 4 5 是否可以使用这个或类似的概念来索引列表,比如my\u list(n),而不是my\u list[n]?您必须使用一个自定义类,并给它一个。list的子类在这里可以很好地工作: class CallableList(list): def __call_
>>> def a(n):
print(n)
return a
>>> b = a(3)(4)(5)
3
4
5
是否可以使用这个或类似的概念来索引列表,比如
my\u list(n)
,而不是my\u list[n]
?您必须使用一个自定义类,并给它一个。list
的子类在这里可以很好地工作:
class CallableList(list):
def __call__(self, item):
return self[item]
您不能使用它来分配索引,但是,只有项访问才有效。切片需要您使用创建slice()
对象:
a = CallableList([1, 2, 3])
a(2)
a(slice(None, 2, None))
nested = CallableList([1, 2, CallableList([4, 5, 6])])
nested(2)(-1)
除此之外,您还必须创建一个自定义Python语法分析器来构建AST,然后从那里编译成字节码。您必须使用一个自定义类,并为它提供一个可调用的语法分析器。
list
的子类在这里可以很好地工作:
class CallableList(list):
def __call__(self, item):
return self[item]
您不能使用它来分配索引,但是,只有项访问才有效。切片需要您使用创建slice()
对象:
a = CallableList([1, 2, 3])
a(2)
a(slice(None, 2, None))
nested = CallableList([1, 2, CallableList([4, 5, 6])])
nested(2)(-1)
此外,您还必须创建一个自定义Python语法分析器来构建AST,然后从那里编译成字节码。my_list()中的括号被视为函数调用。如果需要,您可以编写自己的类来包装列表,并覆盖调用方法以索引到列表中
class MyList(object):
def __init__(self, alist):
self._list = alist
def __call__(self, index):
return self._list[index]
>>> mylist = MyList(['a','b','c','d','e','f'])
>>> mylist(3)
'd'
>>> mylist(4)
'e'
my_list()中的括号被视为函数调用。如果需要,您可以编写自己的类来包装列表,并覆盖调用方法以索引到列表中
class MyList(object):
def __init__(self, alist):
self._list = alist
def __call__(self, index):
return self._list[index]
>>> mylist = MyList(['a','b','c','d','e','f'])
>>> mylist(3)
'd'
>>> mylist(4)
'e'
您可以创建一个返回函数的函数:
def make_callable(some_list):
return lambda x: some_list[x]
original_list = [ 1, 2, 3, 4 ]
callable_list = make_callable(original_list)
print(callable_list(1)) # Prints 2
您可以创建一个返回函数的函数:
def make_callable(some_list):
return lambda x: some_list[x]
original_list = [ 1, 2, 3, 4 ]
callable_list = make_callable(original_list)
print(callable_list(1)) # Prints 2
你问的问题很好。我喜欢你的好奇心你可能会觉得有趣你问的问题很好。我喜欢你的好奇心你可能会觉得有趣。我们如何使用
我的矩阵(x)(y)
而不是我的矩阵[x][y]
来访问2d列表?@Scorpion\u God:你将可调用列表()
对象存储在可调用列表()
中,就像你将一个常规列表存储在另一个列表中以获得矩阵一样。我们如何使用my\u matrix(x)(y)
而不是my\u matrix[x][y]
来访问2d列表?@Scorpion\u God:你将CallableList()
对象存储在CallableList()
中,就像你将常规列表存储在另一个列表中以获得矩阵一样。