2017-07-03 41 views
3

爲什麼這兩個print語句在從int到string的兩次強制轉換看起來做同樣的事情時會產生不同的結果?我錯過了什麼?爲什麼這個Python類型的表現對於map和沒有map的行爲有所不同

板是一個整數列表

#ex.1 
print ' '.join(map(str, board[:3])) 
#ex.2 
print ' '.join(str(board[:3])) 

#out.1 
0 1 2 
#out.2 
[ 0 , 1 , 2 ] 
+1

什麼是'board'? –

+2

什麼「投」? 'map'和'str'完全不同。 'map'構建了一個將函數映射到迭代器的結果列表。在這種情況下,您可以將'str'應用於原始列表中的每個元素。 'str'本身返回對象的字符串表示。在這種情況下,對於'list',這是當你僅僅執行'print(board [:3])時你看到的字符串' –

+0

請提供一個[mcve]。 –

回答

3
print(" ".join(map(str, board[:3]))) 

切片board的每個項目映射到面值整數並用空格加入它(你想大概是什麼,以及做正確的事)

print(' '.join(str(board[:3]))) 

list的轉換作爲它的表示(用括號和全部),然後插入EAC之間的空間h字符。不是你想要的。

+0

啊 - 謝謝!好的解釋 – Pythonista

1

看清楚什麼在你的代碼究竟發生了:

第一種情況:

In [4]: map(str,boards[:3]) 
Out[4]: ['0', '1', '2'] 

In [5]: ''.join(map(str,boards[:3])) 
Out[5]: '012' 

轉換爲列表中的所有元素,以字符串格式,當你使用join它會加入這些元素。

第二種情況:

In [6]: str(boards[:3]) 
Out[6]: '[0, 1, 2]' 

In [7]: ''.join(str(boards[:3])) 
Out[7]: '[0, 1, 2]' 

首先整個列表轉換爲列表,並在使用上加入一個字符串,它會給出相同的。

+0

謝謝!不完全清楚,但現在:) – Pythonista

+0

所以它的.join似乎是負責刪除括號,並從一個列表右側。 – Pythonista

+0

實際上,'join'就像字符串列表一樣被轉換成一個字符串,並且在那裏定義了特定的字符。在吉恩的情況下,他使用空間和我用過的空字符串。 –

相關問題