2015-01-26 3 views
0

В настоящее время я делаю свой первый проект в Python - tic tac toe, так как я думал, что это будет хорошее место для начала, и я наконец попал в дорожный блок.(Python) добавление списка в другой без скобок

В настоящее время у меня установлена ​​плата в виде списка - Board = [1,2,3 ..., 9] и для сброса, содержимое Совета удаляется и повторно вводится отдельным списком, однако он также добавляет скобки.

Есть ли способ захватить содержимое отдельного списка без захвата скобок?

if newGame == 'Y' or 'y': 
    del Board[:] 
    Board.append(startBoard) 
    print Board #for testing 
else: 
    sys.exit('game over') 

Что я получаю выглядит так:

[[1,2,3,4,5,6,7,8,9]] 
+0

Немного не по теме, но имена переменных обычно lower_case/верблюжьего. См. [Pep8] (https://www.python.org/dev/peps/pep-0008/). – Holloway

+0

Возможный дубликат: http://stackoverflow.com/questions/252703/python-append-vs-extend – GLHF

+2

'if newGame == 'Y' или 'y'' всегда будет true. Используйте 'if newGame == 'Y' или newGame == 'y'' или' if newGame in (' y ',' Y) 'или' if newGame.lower() = 'y''. – Matthias

ответ

10

Использование extend.

Board.extend(startBoard) 

В качестве альтернативы вы можете сделать:

Board = [el for el in startBoard] 

и опустить del Board[:] althogether.

В качестве альтернативы вы можете использовать copy модуль:

Board = copy.deepcopy(startBoard) 

Для меня лучшим будет это, хотя:

Board = [i+1 for i in xrange(9)] 

Или проще:

Board = range(1, 10) # python 2 

или

Board = list(range(1, 10)) # python 3 

Как указано в комментариях к zehnpaard.

Также вы можете сделать то, что Erik Allik предложил в своем ответе.

+0

Второй может вызвать проблемы, если есть другие ссылки на Совет, которые также необходимо обновить. Также было бы проще сделать startBoard [:] вместо использования понимания списка. – zehnpaard

+0

Единственная причина, по которой мне не нравится '[:]', состоит в том, что она делает мелкую копию. Для 'int' это нормально, но для сложных объектов это просто не будет. Не то, чтобы кто-то другой, кроме 'deepcopy'. – dmg

+0

, если вы нуждаетесь в глубокой тождественности, реже, вам следует подумать о переосмыслении :) –

0

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

board[:] = startBoard 

который, если ничего, что нужно, чтобы увидеть последние содержимое доски указывает на старый список, функционально эквивалентен:

board = startBoard 

вы можете получить представление о том, что значит изменить что-то в месте против создать новую копию/instance, если вы немного поиграете с назначением того же контура с несколькими переменными без копирования в процессе. Обратите внимание, что с startBoard в вашем случае есть константа, вы хотите удостовериться, что ничто ее не модифицирует, поэтому второй пример - очень плохая идея. Существует также, однако, 3-й:

board = startBoard[:] 

который на самом деле является лучшим из всех трех.Он делает копию startBoard и присваивает ее переменной board, не изменяя старый список. board указывал. Кроме того, поскольку вы используете копию startBoard, вы можете быть уверены, что ваша начальная плата всегда будет такой же в будущем.

Обратите внимание, что эти аспекты возникают только в языках программирования или стилях, где используются изменяемые типы данных; в функциональном программировании почти ничего не меняется, поэтому вы можете полностью не знать о том, чтобы беспокоиться о том, чтобы вызвать случайный побочный эффект, прикоснувшись к чему-то, на что полагается кто-то другой.

Кроме того: обратите внимание, что копирование списка может выполняться множеством способов в Python; с высокой точки зрения уровня, который я в настоящее время, выступая за есть небольшая разница, хотя, так copy.copy(startBoard) такая же, как [x for x in startBoard) таких же, как startBoard[:] и т.д.

Смотри также PEP8, который предоставляет вам полезные правила кодирования ,

0

Попробуйте это:

for x in startBoard: 
    Board.append(x) 
Смежные вопросы