如何初始化Python数据类二维列表?

mrt*_*rsn 9 python-3.x python-3.7 python-dataclasses

可以为初始化 2D 数组的 python 数据类创建默认初始化程序,即结果与

from dataclasses import dataclass, field
from typing import List
MAX = 5
@dataclass
class AlgoData:
    list2D: List[List[int]]  # = ???
    list1D: List[int] = field(default_factory=list)

b = [[] for m in range(MAX)]
a = AlgoData(b)
Run Code Online (Sandbox Code Playgroud)

但没有b争论。结果:

AlgoData(list2D=[[], [], [], [], []], list1D=[])
Run Code Online (Sandbox Code Playgroud)

blh*_*ing 11

您可以使用lambda函数代替default_factoryfor field

from dataclasses import dataclass, field
from typing import List
MAX = 5
@dataclass
class AlgoData:
    list2D: List[List[int]] = field(default_factory=lambda: [[] for m in range(MAX)])
    list1D: List[int] = field(default_factory=list)

a = AlgoData()
Run Code Online (Sandbox Code Playgroud)

a变成:

AlgoData(list2D=[[], [], [], [], []], list1D=[])
Run Code Online (Sandbox Code Playgroud)