Python:列表中的列表 - 将字符串添加到父列表中的项目而不影响子列表的函数?

标签 python string list python-2.7

我使用以下方法生成了一个列表列表:

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/

相关文章:

android - 使用字符串 android 时的性能

c++ - 尝试为所有 std 容器打印重载运算符 << 时出错,为什么?

python - 将新值附加到 MySQL 中列的现有值

python - BeautifulSoup 涉及平面 HTML 层次结构和 next_sibling 循环的故障排除

c - 在 C 中操作字符串

python - 使用列表理解查找 kwargs 中也包含某个子字符串的最大 int 值

java - Collections.sort(list) 和 Collections.sort(list,comparator) 之间的区别

json - R:将具有空元素的嵌套列表转换为 data.frame(来自 json)

python - 如何在 PyTorch 中加载带有多个 JSON 注释的图像

python - 如何在 Python 3.3 中将一些字符转换为五位 unicode 1?