我使用以下方法生成了一个列表列表:
board = []
for i in range(0,5):
board.append(["#"] * 4)
返回结果:
[['#', '#', '#', '#'], ['#', '#', '#', '#'], ['#', '#', '#', '#'], ['#', '#', '#', '#'], ['#', '#', '#', '#']]
并使用此函数将它们打印在单独的行上:
def print_board(board):
for row in board:
print row
哪些输出:
['#', '#', '#', '#']
['#', '#', '#', '#']
['#', '#', '#', '#']
['#', '#', '#', '#']
['#', '#', '#', '#']
我正在寻找某种方法,允许我编辑“board”列表中的项目,将字符串添加到“board”中的项目,但不更改已经是“board”中项目的子列表。
例如,board[0].function('A') 会使 'board' 返回类似以下内容的内容:
[['#', '#', '#', '#'] A, ['#', '#', '#', '#'], ['#', '#', '#', '#'], ['#', '#', '#', '#'], ['#', '#', '#', '#']]
print_board 函数将返回:
['#', '#', '#', '#'] A
['#', '#', '#', '#']
['#', '#', '#', '#']
['#', '#', '#', '#']
['#', '#', '#', '#']
我想我的问题的浓缩版本是:是否有一个函数可以将字符串添加到列表中的项目,这些项目本身就是列表,或者这只是不可能的语法?
感谢您的帮助。
最佳答案
您可以使用它作为生成矩阵的更简单方法:
>>> LoL=[['#']*4 for i in range(5)]
>>> LoL
[['#', '#', '#', '#'], ['#', '#', '#', '#'], ['#', '#', '#', '#'], ['#', '#', '#', '#'], ['#', '#', '#', '#']]
并使用 .insert 将元素添加到给定位置的列表中:
>>> LoL.insert(1,'A')
>>> LoL
[['#', '#', '#', '#'], 'A', ['#', '#', '#', '#'], ['#', '#', '#', '#'], ['#', '#', '#', '#'], ['#', '#', '#', '#']]
问题可能在于混合类型。您可以通过使用多一级列表来解决此问题:
>>> LoL=[[['#']*4] for i in range(5)]
>>> LoL
[[['#', '#', '#', '#']], [['#', '#', '#', '#']], [['#', '#', '#', '#']], [['#', '#', '#', '#']], [['#', '#', '#', '#']]]
然后你可以使用追加而不是插入:
>>> LoL[0].append('A')
>>> LoL
[[['#', '#', '#', '#'], 'A'], [['#', '#', '#', '#']], [['#', '#', '#', '#']], [['#', '#', '#', '#']], [['#', '#', '#', '#']]]
这样就更容易打印,因为列表是同质的:
>>> print '\n'.join(str(i)[1:-1] for i in LoL)
['#', '#', '#', '#'], 'A'
['#', '#', '#', '#']
['#', '#', '#', '#']
['#', '#', '#', '#']
['#', '#', '#', '#']
您还可以为每一行使用字典:
>>> d={i:l for i,l in enumerate(LoL)} #assuming that is just a LoL
>>> d
{0: [['#', '#', '#', '#']], 1: [['#', '#', '#', '#']], 2: [['#', '#', '#', '#']], 3: [['#', '#', '#', '#']], 4: [['#', '#', '#', '#']]}
>>> d[0].append('A')
>>> d
{0: [['#', '#', '#', '#'], 'A'], 1: [['#', '#', '#', '#']], 2: [['#', '#', '#', '#']], 3: [['#', '#', '#', '#']], 4: [['#', '#', '#', '#']]}
>>> d[0]
[['#', '#', '#', '#'], 'A']
然后通过对字典的键进行排序来打印它:
>>> print '\n'.join(str(d[k])[1:-1] for k,v in sorted(d.items()) )
['#', '#', '#', '#'], 'A'
['#', '#', '#', '#']
['#', '#', '#', '#']
['#', '#', '#', '#']
['#', '#', '#', '#']
编辑
您可以这样打印:
>>> for row in LoL:
... for items in row:
... print items,
... print
...
['#', '#', '#', '#'] A
['#', '#', '#', '#']
['#', '#', '#', '#']
['#', '#', '#', '#']
['#', '#', '#', '#']
关于Python:列表中的列表 - 将字符串添加到父列表中的项目而不影响子列表的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15856892/