我目前正在制作我的第一个Python项目 - tic tac toe,因为我认为这将是一个很好的起点,我终于遇到了障碍。
我目前已将电路板设置作为列表 - Board = [1,2,3 ...,9]并重置,Board的内容将被删除并由单独重新输入但是它也会添加括号。
有没有办法在没有抓住括号的情况下抓取单独列表的内容?
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 :(得分:11)
使用extend
。
Board.extend(startBoard)
或者你可以这样做:
Board = [el for el in startBoard]
并省略del Board[:]
。
或者,您可以使用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提出的建议。
答案 1 :(得分:0)
如果要清除并修改列表内容(而不是创建新的清单并将其分配回包含旧列表的变量):
board[:] = startBoard
如果没有需要查看最新的电路板内容指向旧列表,则功能上等同于:
board = startBoard
你可以了解在原地修改内容的意义与创建一个新的副本/实例有关,如果你在一定程度上将相同的内容分配给多个变量而不在此过程中制作副本。
另外,请注意,因为你的startBoard
是一个常量,你想确保没有任何东西修改它,所以第二个例子真的是一个非常糟糕的主意。然而,还有第三个:
board = startBoard[:]
实际上是迄今为止最好的三个。它的作用是复制startBoard
并将其分配给变量board
,而无需修改board
指向的旧列表。此外,由于您使用的是startBoard
的副本,因此可以确定您的启动板在将来始终保持不变。
请注意,这些方面仅出现在使用可变数据类型的编程语言或样式中;在功能编程中,几乎没有任何东西被修改过,因此你可以完全无视通过触摸别人依赖的东西来引起意外的不良副作用。
此外:请注意,复制列表可以在Python中以多种方式完成;从我目前所说的高级别观点来看,虽然差别不大,但copy.copy(startBoard)
与[x for x in startBoard)
相同,与startBoard[:]
等相同。< / p>
另请参阅PEP8,它为您提供了有用的编码约定。
答案 2 :(得分:0)
试试这个:
for x in startBoard:
Board.append(x)