如何在 Python 中初始化一个二维数组?

新手上路,请多包涵

我开始使用python,我正在尝试使用一个二维列表,我最初在每个地方都填充了相同的变量。我想出了这个:

 def initialize_twodlist(foo):
    twod_list = []
    new = []
    for i in range (0, 10):
        for j in range (0, 10):
            new.append(foo)
        twod_list.append(new)
        new = []

它给出了预期的结果,但感觉像是一种解决方法。有没有更简单/更短/更优雅的方法来做到这一点?

原文由 thepandaatemyface 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 784
2 个回答

Python中经常出现的一种模式是

bar = []
for item in some_iterable:
    bar.append(SOME EXPRESSION)

这有助于激发列表理解的引入,它将该片段转换为

bar = [SOME_EXPRESSION for item in some_iterable]

它更短,有时更清晰。通常,您会养成识别这些的习惯,并经常用推导式替换循环。

您的代码两次遵循此模式

twod_list = []                                       \
for i in range (0, 10):                               \
    new = []                  \ can be replaced        } this too
    for j in range (0, 10):    } with a list          /
        new.append(foo)       / comprehension        /
    twod_list.append(new)                           /

原文由 Mike Graham 发布,翻译遵循 CC BY-SA 4.0 许可协议

要在 Python 中初始化二维列表,请使用

t = [ [0]*3 for i in range(3)]

但是不要使用 [[v]*n]*n ,这是一个陷阱!

 >>> a = [[0]*3]*3
>>> a
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>> a[0][0]=1
>>> a
[[1, 0, 0], [1, 0, 0], [1, 0, 0]]

原文由 Jason CHAN 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏