Почему этот бросок Python ведет себя по-разному для карты и без карты

Почему эти два оператора печати дают разные результаты, когда два приведения от int к строке, кажется, делают то же самое? Что мне не хватает?

доска это список целых чисел

#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 ]

2 ответа

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

наносит на карту каждый элемент нарезанного board к буквальному целому числу и соединяет его с пробелами (вероятно, что вы хотите, и что нужно сделать)

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

преобразует list как его представление (с скобками и все), а затем вставляет пробел между каждым символом. Не то, что вы хотите.

Четко посмотрите, что именно происходит в вашем коде:

Первый случай:

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]'

Сначала весь список преобразуется в список, и при использовании соединения со строкой он выдаст то же самое.

Другие вопросы по тегам