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