2017-07-03 3 views
3

Pourquoi ces deux instructions d'impression produisent-elles des résultats différents lorsque les deux conversions de int en chaîne semblent faire la même chose? Qu'est-ce que je rate ?Pourquoi cette distribution Python se comporte-t-elle différemment pour la carte et sans la carte

carte est une liste d'entiers

#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

Qu'est-ce que 'board'? –

+2

Qu'est-ce qui "coule"? 'map' et' str' font des choses complètement différentes. 'map' construit une liste qui résulte du mappage de la fonction sur un itérable. Dans ce cas, vous obtenez la liste qui résulte de l'application de' str' à chaque élément de votre liste d'origine. 'str' lui-même renvoie une représentation sous forme de chaîne de votre objet. Dans ce cas, pour une 'liste', c'est la chaîne que vous voyez quand vous faites juste' print (board [: 3]) ' –

+0

Veuillez fournir un [mcve]. –

Répondre

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

cartes de chaque élément du board coupé en tranches à un littéral entier et il rejoint avec des espaces (probablement ce que vous voulez, et la bonne chose à faire)

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

convertit le list que sa représentation (avec des supports et tous), puis insère un espace entre eac h personnage. Pas ce que tu veux.

+0

Ah - merci! Belle explication – Pythonista

1

voir clair sur ce qui se passe exactement dans votre code:

Premier cas:

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

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

Convertir à tous les éléments de la liste au format de chaîne et lorsque vous utilisez join il sera joint à ces éléments.

Deuxième cas:

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

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

liste complète d'abord convertir en liste et en utilisant rejoindre sur une corde, il donnera la même chose.

+0

Merci! N'était pas entièrement clair pour moi mais est maintenant :) – Pythonista

+0

donc c'est le .join qui semble être responsable de la suppression des crochets et, à partir d'une liste à droite. – Pythonista

+0

En fait, 'join' ressemble à une liste de chaînes convertie en une chaîne avec un caractère spécifique que nous avons défini là-bas. Dans le cas de Jean, il utilisait l'espace et mon string vide utilisé. –