Python之讀取鍵盤輸入到一維列表及二維列表

在網站上刷一些題的時候,經常涉及到從鍵盤的終端輸入讀取一系列參數,並把相應的參數存儲到列表裏的情況。

1、Python讀取列表的集中方式

Python3 input() 函數:
Python3.x 中 input() 函數接受一個標準輸入數據,返回爲 string 類型。
注:在 Python3.x 中 raw_input() 和 input() 進行了整合,去除了 raw_input( ),僅保留了input( )函數,其接收任意任性輸入,將所有輸入默認爲字符串處理,並返回字符串類型。

sys.stdin.readline():
sys.stdin.readline()將所有輸入視爲字符串,並在最後包含換行符’\n’,可以通過sys.stdin.readline().strip(’\n’)去掉換行符。


2、Python代碼實現

簡單介紹一下,相關的解釋在代碼註釋裏已經註釋的很清楚了,在這邊不做贅述。
test1 把參數讀取到一維列表裏,分隔符號爲逗號或者下劃線
test2 把參數一行一行的讀取到一個一維列表裏
test3 把任意行的參數讀取到一個二維列表裏,以空字符結束輸入
test4 讀取輸入的n參數,把參數讀取到n行的二維列表裏(就是先輸入兩個數用空格隔開,代表二維列表的行列數,回車之後輸入的值存到列表中)
 

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import sys


## 讀取參數輸入到一個一維列表裏,輸入參數以逗號“,”或者下劃線“_”隔開,中間可能有任意空格,以換行結束輸入
## 示例輸入:    1,    2_     3,    5_7     ,8
# 輸出[1,2,3,5,7,8]
# 值得注意的是:
# Python3.x 中 input() 函數接受一個標準輸入數據,返回爲 string 類型。
# Python2.x 中 input() 相等於 eval(raw_input(prompt)) ,用來獲取控制檯的輸入。返回類型可能多種

def input_test1():
	## input 進來是str的格式
	input_data = input()

	# 對字符串進行初步的處理  
	## 去除裏面的空格,需要注意replace不會改變原來輸入的內容,
	## String.replace(old, new, count) 加上數量的話只替換前count個
	no_blank_data = input_data.replace(" ","")
	no_blank_data = no_blank_data.replace("_",",")   ##多個字符分割提前替換掉

	# 以逗號爲分割符號把字符裏的數字存在列表裏
	# input_list_test = no_blank_data.split(",")
	input_list_test = no_blank_data.split(",")   

	# 將list裏的字符串轉換爲數字
	input_list_test = list(map(int,input_list_test))

	# print(input_list_test)
	# print(type(input_list_test))
	# print(type(input_list_test[0]))
	return input_list_test


# 一行一行的進行輸入,每結束一行輸入就把輸入放到列表裏去,指定結束符號爲"\n"就是一行空的輸入
# 示例輸入:
# 12334
# 23456
# 12
# 30
#
# 示例輸出: [12334, 23456, 12, 30]
def input_test2():
		
	lines = []
	try:
	    while True:
	        # Python strip() 方法用於移除字符串頭尾指定的字符(默認爲空格或換行符)或字符序列。
	        line = sys.stdin.readline().strip()
	        ## 指定跳出循環的輸出符號,這個地方是一行不輸入,直接按回車就會跳出循環
	        if line == '':
	            break
	        else:
	        	lines.append(line)	        
	except:
	    pass
	# str轉換成int格式
	lines = list(map(int,lines))
	return lines

#  不指定行數輸入多行數據,以空行或者換行符結束,返回一個二維list
def input_test_3():
	try:
		two_dimemsional_list = []
		while True:
			# Python strip() 方法用於移除字符串頭尾指定的字符(默認爲空格或換行符)或字符序列。
			row = sys.stdin.readline().strip()
			if row == '':
				break
			row_list = list(map(int,row.split()))     ## 輸入時,利用map直接映射成int類型
			two_dimemsional_list.append(row_list)     ## 這邊變成extend就可以存儲成一個一維數組

		# two_dimemsional_list = list(map(int,two_dimemsional_list))
		
	except:
		pass

	return two_dimemsional_list

# 第一行輸入指定n行m列,然後輸入n*m的數據,數據之間用空格隔開,存儲到n*m的一個二維列表裏
def input_test_4():
	n_and_m = input()
	# 方法1,以空格爲分隔符號,自動過濾掉空行  
	# n_and_m_list = filter(None,n_and_m.split(" "))

	# 方法2,split()函數默認可以按空格分割,並且把結果中的空字符串刪除掉
	n_and_m_list = n_and_m.split()
	n = int(n_and_m_list[0])
	m = int(n_and_m_list[1])

	two_dimemsional_list = []
	for i in range(n):
		row = input().strip()
		row_list = list(map(int,row.split()))   ## 如果就是需要字符串類型,就不用轉換成int
		two_dimemsional_list.append(row_list)
		i = i + 1

	return two_dimemsional_list


def main():
	# input_list_test1 = input_test1()
	# print(input_list_test1)

	# input_list_test2 = input_test2()
	# print(input_list_test2)

	# input_list_test3 = input_test_3()
	# print(input_list_test3)

	input_list_test4 = input_test_4()
	print(input_list_test4)



if __name__ == '__main__':
    main()

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章