Python 将数据类型获取为<;班级地图>;而不是int
我对Python比较陌生,一直在尝试解决HackerRank上一些有竞争力的编程问题。为了接收输入,我必须从“stdin”获取它,因此我在一个问题中成功地使用了它,如下所示:Python 将数据类型获取为<;班级地图>;而不是int,python,python-3.x,stdin,Python,Python 3.x,Stdin,我对Python比较陌生,一直在尝试解决HackerRank上一些有竞争力的编程问题。为了接收输入,我必须从“stdin”获取它,因此我在一个问题中成功地使用了它,如下所示: ... n,m = map (int, stdin.readline().rstrip().split()) coins=[] coins=[int(n) for n in stdin.readline().rstrip().split()] ... 这将需要以下方面的投入: 4.3 1 2 3 并将n和m中的4、3分
...
n,m = map (int, stdin.readline().rstrip().split())
coins=[]
coins=[int(n) for n in stdin.readline().rstrip().split()]
...
这将需要以下方面的投入:
4.3
1 2 3
并将n和m中的4、3分别存储为整数数据类型,将1、2、3存储为列表
然而,在一个新项目中,我尝试了以下方法:
from sys import stdin,stdout
n = map (int, stdin.readline().rstrip().split())
arr=[]
for i in range (n):
x= map(int, stdin.readline().rstrip().split())
arr.append(x)
其目的是从第一行中获取一个整数n,然后读取下面包含一个整数的n行,并将这些整数存储在一个名为arr的列表中。
这会引发一个运行时错误,表示n是类映射对象,而不是整数
我尝试在这两种情况下使用类型(n),第一个返回int,第二个返回map对象。如何修复代码并获得预期的输入 在Python 3中,map()
返回一个iterable对象。第一次尝试将输出分配给两个变量:
Python将在右侧获取一个iterable,并从中获取值并将其分配给左侧的每个变量。这意味着对返回的map()
对象进行迭代,并使用它生成的每个值进行赋值
您的第二次尝试仅分配给一个变量:
n = map (int, stdin.readline().rstrip().split())
此处不进行iterable解包,因此只分配map()
对象
您有三种选择来避免您的问题:
- 不要使用
,直接转换成整数即可。无需拆分或剥离,毕竟只有一个数字:map()
n = int(stdin.readline())
int()
- 使用
手动迭代: 注意,我删除了next()
.rstrip()
str.split()
- 通过添加逗号使其成为可分配的赋值:
n, = map (int, stdin.readline().split())
from sys import stdin, stdout
from itertools import islice
arr = [int(l) for l in islice(stdin, int(next(stdin)))]
stdin
是一个文件对象,与所有文件对象一样,支持迭代。每次迭代都会得到一行islice()
将迭代次数限制在给定的范围内,这是我们阅读的第一行提供的。感谢您提供的精彩且信息丰富的答案!我显然需要多读一些关于地图的书。
n, = map (int, stdin.readline().split())
from sys import stdin, stdout
from itertools import islice
arr = [int(l) for l in islice(stdin, int(next(stdin)))]