因为在OJ上做编程,要求标准输入,特别是多行输入。特意查了资料,自己验证了可行性。
-
if __name__ ==
"__main__":
-
strList = []
-
for line
in sys.stdin:
#当没有接受到输入结束信号就一直遍历每一行
-
tempStr = line.split()
#对字符串利用空字符进行切片
-
strList.extend(tempStr)
#把每行的字符串合成到列表
Q1:系统如何判断输入结束?
A:按下换行键然后Ctrl+d结束。
Q2:split()的作用?
A:str.split(str="", num=string.count(str)).
split()通过指定分隔符对字符串进行切片,并返回切片结果。
str -- 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。
num -- 分割次数。
Q3:为什么选择list.extend()而不是list.append(),这两者有何区别?
A:extend()是将新对象的内容添加到列表,append()是将新对象整体添加到列表。如下图:
-
list1 = [
1,
2,
3]
-
list2 = [
4,
5,
6]
-
list1.append(list2)
输出是:
-
list1 = [
1,
2,
3]
-
list2 = [
4,
5,
6]
-
list1.extend(list2)
输出是:
所以看程序的需求选择。
一、前言
本文主要使用python 的raw_input() 函数读入多行不定长的数据,输入结束的标志就是不输入数字情况下直接回车,并填充特定的数作为二维矩阵
二、代码
-
def get2DlistData():
-
res = []
-
-
inputLine = raw_input()
#以字符串的形式读入一行
-
#如果不为空字符串作后续读入
-
while inputLine !=
'':
-
listLine = inputLine.split(
' ')
#以空格划分就是序列的形式了
-
listLine = [int(e)
for e
in listLine ]
#将序列里的数由字符串变为int类型
-
res.append( listLine )
-
-
inputLine = raw_input()
-
-
return res
-
-
def get2DMatData( inList , val ):
-
'''
-
输入:inList为不等长的二维数组,val为需填充的值
-
输出:np.array的形式输出填补完的二维矩阵
-
'''
-
maxCols =
0
-
#获得最大长度的子序列
-
for i
in range( len( inList ) ):
-
lenI = len( inList[i] )
-
if lenI > maxCols:
-
maxCols= lenI
-
#对每个子序列作填充
-
for i
in range( len( inList ) ):
-
num = len( inList[i] )
-
while(num <= maxCols):
-
inList[i].append( val )
-
num +=
1
-
-
return np.array( inList , dtype = np.int64 )
-
-
if __name__==
'__main__':
-
inData = get2DimData()
-
print inData
-
print
'\n'
-
-
matArray = get2DMatData(inData ,
0)
-
-
print( matArray )
三、运行结果