首页 文章

(Python)将列表添加到另一个没有括号的列表

提问于
浏览
0

我目前正在制作我的第一个Python项目 - tic tac toe,因为我认为这将是一个很好的起点,我终于遇到了障碍 .

我目前已将电路板设置作为列表 - Board = [1,2,3 ...,9]并重置,Board的内容将被删除并通过单独的列表重新输入,但它也会添加括号 .

有没有办法 grab 单独的列表的内容,而不是 grab 括号?

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

3 回答

  • 10

    使用 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的建议 .

  • 0

    如果要清除并修改列表的内容(而不是创建新的清单并将其分配回包含旧列表的变量):

    board[:] = startBoard
    

    如果没有什么需要看到最新的董事会内容指向旧列表,在功能上等同于:

    board = startBoard
    

    你可以了解在原地修改某些东西意味着什么,如果你玩一点点同时将相同的内容分配给多个变量而不在这个过程中制作副本,你就可以了解它 .

    此外,请注意,因为 startBoard 在你的情况下是一个常量,你想确保没有任何东西修改它,所以第二个例子真的是一个非常糟糕的主意 . 还有第三个:

    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)
    

相关问题