Python如何處理單行輸入的多個數(shù)字,以及map函數(shù)的使用

這段時間參加了幾個公司的在線筆試抵知,發(fā)現(xiàn)了一個很有意思的現(xiàn)象墙基,因為不同公司使用的測試平臺不同,所以將輸入的數(shù)據(jù)告訴代碼的方式也會有所區(qū)別刷喜。一種是“保姆”類型残制,即作為應(yīng)試者,并不需要考慮如何將輸入轉(zhuǎn)換成機(jī)器能看得懂的代碼掖疮,而只要實現(xiàn)解決問題的特定函數(shù)就可以了初茶。輸入的話已經(jīng)有固定的代碼實現(xiàn)了。典型例子比如抛巧粒客恼布、Leetcode以及HackerRank。另外一種是應(yīng)試者需要考慮如何將輸入轉(zhuǎn)變?yōu)榇a的全過程搁宾,這就有些像本科時做的那種Online Judge折汞,給個題目,然后編程板里全是空白的猛铅,需要從零開始寫起字支。

比如說有這樣的輸入樣例,其中第一行代表總共有多少數(shù)字,而第二行的輸入代表每個數(shù)字的內(nèi)容堕伪。

5
1 2 3 4 5


這種的話用C++之類的語言就非常好實現(xiàn)揖庄。只需要定義好對應(yīng)變量的類型,跟著輸入樣例的順序進(jìn)行數(shù)據(jù)輸入的實現(xiàn)就可以了欠雌。

int n;
cin >> n;
vector<int> array;
for(i = 0; i < n; i++){
    int element;
    cin >> element;
    array.push_back(element);
}

但是如果使用的是Python環(huán)境的話就會出一些問題蹄梢,比如我們把上面的代碼修改為python的形式:

n = int(input());
array = []
for i in range n:
    int element;
    element = int(input());
    array.append(element);

這個時候如果我們按照樣例輸入的方式輸入數(shù)據(jù),Python會在element的部分報錯富俄,原因是無法將輸入轉(zhuǎn)換成int格式的內(nèi)容禁炒。
為什么會出現(xiàn)這樣的原因呢?其實是因為當(dāng)我們輸入一行數(shù)據(jù)的時候霍比,python會直接將這一整行的數(shù)據(jù)賦值給element幕袱,所以當(dāng)?shù)谝淮屋斎雃lement的時候,最后得到的element是"1 2 3 4 5"的字符串格式(沒進(jìn)行強(qiáng)制int轉(zhuǎn)換的情況下)悠瞬,因為中間有空格所以無法轉(zhuǎn)換成數(shù)字(就算省去空格也不是我們想要的數(shù)字)们豌。
像C++這樣的語言上述代碼可以跑的一個很重要的原因是它們在定義每個變量的時候,會特定指出這個變量是哪個類型的浅妆,因此輸入的時候空格就相當(dāng)于一個截斷操作望迎,來進(jìn)行數(shù)字和數(shù)字的區(qū)分。(因為int類型不可能會包含空格)
那么在Python中凌外,應(yīng)該如何設(shè)置才可以在只用一行輸入的情況下辩尊,完成一個數(shù)組的賦值呢?
首先我們需要放棄使用For循環(huán)康辑,因為Python是將整行輸入賦值給對應(yīng)變量的摄欲,那么如果用for循環(huán),即使輸入沒有報錯晾捏,我們也沒有n行的輸入來完成這個循環(huán).(因為我們只有一行)
其次我們需要使用split函數(shù)來切分輸入的這一行數(shù)據(jù)蒿涎,使其變成["1","2","3","4","5"]的形式。

element = input().split()

這個時候需要注意的是惦辛,雖然我們已經(jīng)得到了一個數(shù)組劳秋,但是里面的每個元素都是str字符串格式,而不是我們想要的int格式胖齐,那么這個時候需要如何操作呢玻淑?
此時可以使用到python的map函數(shù),它的主要作用是對迭代對象進(jìn)行對應(yīng)的映射呀伙,并返回一個迭代器补履,它的用法如下,

map(function, iterable, ...)

第一個參數(shù)是function剿另,即需要進(jìn)行映射的函數(shù)箫锤。第二個參數(shù)是需要進(jìn)行映射的可迭代對象(iterable)贬蛙,例如list就是一種可迭代對象。
舉個栗子谚攒,假設(shè)我們定義一個函數(shù)阳准,使其返回值是輸入值的2倍,那么我們可以這么寫馏臭,

def a(num):
    return num * 2

那么這個函數(shù)a就可以作為第一個參數(shù)function的輸入野蝇,與此同時我們定義一個輸入的列表array,

array = [1, 2, 3, 4, 5]  

這樣我們可以通過map生成一個對應(yīng)的迭代器。當(dāng)然迭代器自己是無法做輸出的(如果直接print也是只會顯示迭代器自己的信息)括儒,這個時候可以使用list()函數(shù)將迭代器轉(zhuǎn)化為列表绕沈。

array = [1, 2, 3, 4, 5]  
print(list(map(a, array)))

這時我們可以看到輸出為[2, 4, 6, 8, 10],這樣就完成了一個映射的全過程帮寻。其實map函數(shù)是一個不用for循環(huán)來實現(xiàn)批量操作的很好的方法乍狐。
回到之前的問題,我們應(yīng)該如何將字符串?dāng)?shù)組變成一個純數(shù)字類型的數(shù)組呢固逗?這個時候我們可以通過map映射對字符串?dāng)?shù)組中的每個元素做一個int強(qiáng)制轉(zhuǎn)換澜躺,即調(diào)用int()函數(shù)。然后通過list()將生成的迭代器轉(zhuǎn)換為數(shù)組抒蚜。

print(list(map(int, input().split())))

如果我們的輸入為1 2 3 4 5, 那么對應(yīng)的輸出就變?yōu)閇1, 2, 3, 4, 5]了耘戚。這樣我們就可以實現(xiàn)將一行的多個數(shù)據(jù)轉(zhuǎn)變?yōu)橐粋€數(shù)組的功能了嗡髓。
完整代碼如下:

element = list(map(int, input().split()))
# finish your input
print(element)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市收津,隨后出現(xiàn)的幾起案子饿这,更是在濱河造成了極大的恐慌,老刑警劉巖撞秋,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件长捧,死亡現(xiàn)場離奇詭異,居然都是意外死亡吻贿,警方通過查閱死者的電腦和手機(jī)串结,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來舅列,“玉大人肌割,你說我怎么就攤上這事≌室” “怎么了把敞?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長榨惠。 經(jīng)常有香客問我奋早,道長盛霎,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任耽装,我火速辦了婚禮愤炸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘剂邮。我一直安慰自己摇幻,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布挥萌。 她就那樣靜靜地躺著绰姻,像睡著了一般。 火紅的嫁衣襯著肌膚如雪引瀑。 梳的紋絲不亂的頭發(fā)上狂芋,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天,我揣著相機(jī)與錄音憨栽,去河邊找鬼帜矾。 笑死,一個胖子當(dāng)著我的面吹牛屑柔,可吹牛的內(nèi)容都是我干的屡萤。 我是一名探鬼主播,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼掸宛,長吁一口氣:“原來是場噩夢啊……” “哼死陆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起唧瘾,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤措译,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后饰序,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體领虹,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年求豫,在試婚紗的時候發(fā)現(xiàn)自己被綠了塌衰。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡注祖,死狀恐怖猾蒂,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情是晨,我是刑警寧澤肚菠,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站罩缴,受9級特大地震影響蚊逢,放射性物質(zhì)發(fā)生泄漏层扶。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一烙荷、第九天 我趴在偏房一處隱蔽的房頂上張望镜会。 院中可真熱鬧,春花似錦终抽、人聲如沸戳表。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽匾旭。三九已至,卻和暖如春圃郊,著一層夾襖步出監(jiān)牢的瞬間价涝,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工持舆, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留色瘩,地道東北人。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓逸寓,卻偏偏與公主長得像居兆,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子竹伸,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,573評論 2 359

推薦閱讀更多精彩內(nèi)容