Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.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
Python 具有str和int的列表中列表的数据类型出错_Python_Python 3.x_List_Types - Fatal编程技术网

Python 具有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',

我正在编写的函数的数据类型有问题。输入的数据是一个包含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', 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]
都不会产生您描述的错误,所以你的错误来自其他地方。我们需要一个帮助,您提供了一个示例,但不是一个完整或可复制的示例。