int、input()与int(input())的区别及代码报错原因咨询
两种map写法的区别及报错原因
问题核心:搞懂map函数的调用逻辑
map函数的标准调用格式是**map(处理函数, 可迭代对象)**——第一个参数是要执行的函数(比如int),第二个参数是待遍历的可迭代对象(比如列表),它会把可迭代对象的每个元素依次传给处理函数转换。
正确写法的执行逻辑
list(map(int, input("Enter first array: ").split()))
input("Enter first array: ").split():用户输入的字符串(如"1 2 3")被split()按空格分割成字符串列表["1", "2", "3"],这是一个合法的可迭代对象。map(int, ["1", "2", "3"]):map遍历列表中的每个字符串,分别传给int()函数转成整数,得到包含1、2、3的迭代器。list(...):把迭代器转换成最终的整数列表[1, 2, 3]。
错误写法的问题所在
list(map(int(input("Enter first array: ").split())))
括号位置错误导致执行逻辑完全走偏:
- 先执行
input("Enter first array: ").split()得到列表["1", "2", "3"]。 - 紧接着执行
int(["1", "2", "3"]):试图把整个列表传给int()函数,但int()只能接收字符串、字节类对象或数字,根本不支持列表类型,这直接触发了报错信息里的TypeError。 - 退一步说,就算
int()能处理列表,map()里只传入了一个参数(int()的返回值),而map要求至少两个参数(处理函数+可迭代对象),后续也会触发参数不足的错误。
错误代码示例
def Union(arr1, arr2): res = list(set(arr1) | set(arr2)) return sorted(res) arr1 = list(map(int(input("Enter first array: ").split()))) arr2 = list(map(int(input("Enter second array: ").split()))) print(Union(arr1, arr2))
报错信息
Enter first array: 1 2 3 Traceback (most recent call last): File "main.py", line 6, in <module> arr1 = list(map(int(input("Enter first array: ").split()))) TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'
正确代码示例
def Union(arr1, arr2): res = list(set(arr1) | set(arr2)) return sorted(res) arr1 = list(map(int,input("Enter first array: ").split())) arr2 = list(map(int,input("Enter second array: ").split())) print(Union(arr1, arr2))
内容的提问来源于stack exchange,提问作者beginner
相关产品推荐
相关产品推荐

