python二維列表(list)初始化
一、總結
一句話總結:
可以用c = [[0]*4 for _ in range(3)]的方式來初始化3行4列的二維數組,用乘號(*)重復不可變數據類型(這里是int 0),用循環重復可變數據類型(這里是列表)
二、python:二維列表(list)初始化
轉自或參考:python:二維列表(list)初始化
https://blog.csdn.net/weixin_43216017/article/details/89683873
當我們使用python做數據的時候,經常會遇到需要初始化一個二維列表,然后對列表的每一個子項目(我們這里假設也是列表)進行操作。
在初始化的時候有一個坑,在做題目的時候卡住好久,根本找不到解決的方法。后來才發現是二維列表初始化的問題。
首先,如果我們需要初始化一個一維列表的時候
In [1]:a = [0] * 5
In [2]:a
Out[2]: [0, 0, 0, 0, 0]
二維列表的初始化可以這樣做:
In [3]:b = [[0] * 5] * 5
In [4]:b
Out[4]:
[[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]]
不過這樣有一個很大的問題:這樣操作的意思實際上是對於[0] * 5
的一維列表復制了5次。也就是說,當我更改其中的任意一個的時候,其實是對b列表中的5個子列表全部修改了。
In [5]:b[0][0]='這個方法不行'
In [6]:b
Out[6]:
[['這個方法不行', 0, 0, 0, 0],
['這個方法不行', 0, 0, 0, 0],
['這個方法不行', 0, 0, 0, 0],
['這個方法不行', 0, 0, 0, 0],
['這個方法不行', 0, 0, 0, 0]]
為了解決這個問題,推薦采用以下方法:
In [7]:c = [[0] * 5 for _ in range(5)]
In [8]:c[0][0]='這個方法行'
In [9]:c
Out[9]:
[['這個方法行', 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]]