Java中nextInt()和hasNext()的Python实现是什么?
我有这个输入文件Java中nextInt()和hasNext()的Python实现是什么?,java,python,Java,Python,我有这个输入文件 1 2 10 2 81 3 23 6 2537857295 19 34271891003654321 1267253 我是这样读文件的 with open("powersearch.txt") as fileIn: for line in fileIn: print line 我想知道,对于每一行,是否要将第一个整数存储为firstNum,将第二个整数存储为secondNum。有了Java,我可以使用扫描器和nextInt()和hasNext()来获
1 2
10 2
81 3
23 6
2537857295 19
34271891003654321 1267253
我是这样读文件的
with open("powersearch.txt") as fileIn:
for line in fileIn:
print line
我想知道,对于每一行,是否要将第一个整数存储为
firstNum
,将第二个整数存储为secondNum
。有了Java,我可以使用扫描器
和nextInt()
和hasNext()
来获取整数,Python中的等价物是什么?请放弃Java思想。他们只会把你弄糊涂
Python是另一种语言,您必须学习Python方法
这里有一个例子
with open("powersearch.txt") as fileIn:
for firstNum, secondNum in ( map(int, line.split()) for line in fileIn ):
print firstNum, secondNum
要从字符串中解析int,只需使用
int(s)
,其中s
是字符串
我认为这是你的例子中最合乎逻辑的方式:
with open("powersearch.txt") as fileIn:
for line in fileIn:
n1, n2 = (int(s) for s in line.split())
print(n1, n2)
Python是一种不同于Java的语言,在我看来,它更具表现力(我可以在一行中完成比Java更多的工作,并且仍然可以编写可读的代码)。如果您尝试用Python编写Java内容,您会发现该语言的效率远远低于它所能达到的效率。编辑-nightcracker的解决方案现在几乎相当
(我假设您使用的是Python 2.x,而不是语法中的3.x。)
这是口味的问题,但我更喜欢s.Lott和nightcracker的混合解决方案:
with open("powersearch.txt") as fileIn:
for line in fileIn:
firstNum, secondNum = [int(s) for s in line.split()]
print firstNum, secondNum
对我来说,列表理解比地图更容易阅读。解构赋值允许我们获取两项列表,并同时将元素值分配给两个不同的局部变量。前面的答案(n1,n2=(int(s)表示line.split())
)仅在使用两个数字时才起作用。否则,您将需要使用map
功能
with open("powersearch.txt") as fileIn:
for line in fileIn:
line_int = list(map(int, line.split()))
print(line_int)
其中缺少一个逗号。我认为“map(int(line.split())”应该是“map(int,line.split())”。最好使用惰性求值并使用
(int(s)表示line.split()中的s)
相反。如果一行上有100000个整数,则性能会显著提高。如果一行上没有两个整数,则无论如何都会导致错误。如果您担心更优雅地处理这种情况,则生成器表达式只是开始。