Python 具有str和int的列表中列表的数据类型出错
我正在编写的函数的数据类型有问题。输入的数据是一个包含str和int列表的列表,如下所示:Python 具有str和int的列表中列表的数据类型出错,python,python-3.x,list,types,Python,Python 3.x,List,Types,我正在编写的函数的数据类型有问题。输入的数据是一个包含str和int列表的列表,如下所示: list_example = [['a', 1],['b', 2],['c', 3]] def inputting_incrementing(club: str, list: List[List[str, int]]) -> None: [('a', 1), ('b', 1), ('c', 1)] 函数如下所示: list_example = [['a', 1],['b', 2],['c',
list_example = [['a', 1],['b', 2],['c', 3]]
def inputting_incrementing(club: str, list: List[List[str, int]]) -> None:
[('a', 1), ('b', 1), ('c', 1)]
函数如下所示:
list_example = [['a', 1],['b', 2],['c', 3]]
def inputting_incrementing(club: str, list: List[List[str, int]]) -> None:
[('a', 1), ('b', 1), ('c', 1)]
错误是:
TypeError:泛型类型的参数必须是类型。上[课]
“str”,类“int”]
谁能解释一下这个问题?一切都有帮助。我无法重现您的错误。您得到的错误是如果您输入了:
List[[str, int]]
您是否将全局变量命名为List
或Tuple
,这样“索引”它会导致代码的计算结果符合上述要求?我建议这样做是因为您显然对变量名不太小心(您命名了参数list
,隐藏了该函数体的list
构造函数)
我建议添加一个print(List,Tuple)
,以确保它们仍然是typing
模块中的类型,并确保没有意外地在某个地方将括号加倍,如我上面的示例所示
我还将注意到,即使这样做有效,注释也与您提供的输入不匹配;您提供的是一个
列表
的列表,而不是元组的列表。我认为创建元组的正确方法是将所有元素放在括号之间。如果要创建元组列表,应如下所示:
list_example = [['a', 1],['b', 2],['c', 3]]
def inputting_incrementing(club: str, list: List[List[str, int]]) -> None:
[('a', 1), ('b', 1), ('c', 1)]
类型注释表示tuple,但您给了它一个列表。我看不出会有什么效果。另外,变量list
会覆盖一个内置函数——不要这样做。您是否通过键入import list,Tuple导入?您使用的是什么Python版本?无法复制您正在运行的Python的哪个版本?在任何情况下,错误消息都暗示您执行了类似于str='foo'
和int=42
的操作,然后尝试将这些变量用作键入对象元组的参数。在任何情况下,您都必须提供一个。犯了一个小错误,表示列表而不是元组。这个版本是Python3.7I,在这个问题上犯了一个错误,但它应该是列表,而不是元组。该函数的目标是能够输入列表的嵌套列表。我打印了列表和元组的类型,结果是正确的输出,与键入的类型相同。不幸的是,List[str,int]
是非法的<代码>键入。列表
仅支持列表
s的预期用例,这是一个可变长度的同构序列,这意味着列表
只能接受一个参数。如果你想这样滥用它,你能得到的最接近法律注释是List[List[Any]]
或List[List[Union[str,int]]]
,但两者都不会强制内部List
的长度正好是两个元素,一个str
后跟一个int
Tuple
可以用于固定长度的异构Tuple
s(主要用途)或“不可变列表”,但List
没有那么灵活。@AntonyD:无论如何,List[Tuple[str,int]]
或List[List[str,int]
都不会产生您描述的错误,所以你的错误来自其他地方。我们需要一个帮助,您提供了一个示例,但不是一个完整或可复制的示例。