【问题标题】:Easier way to assign a value to the first element of each sub list?为每个子列表的第一个元素赋值的更简单方法?
【发布时间】:2018-07-05 21:39:08
【问题描述】:

我定义了一个这样的嵌套列表:

 T=[[0 for i in range(4)] for i in range(4)]

现在要为每个子列表的第一个元素分配一个值,例如10。 我试过这个:T[:][0] = 10,但它不起作用。我知道这可以使用循环来完成,但有没有更简单的方法?

【问题讨论】:

    标签: python list nested assign


    【解决方案1】:

    您可以在推导式中使用三元 x if y else z 运算符:

    T = [[0 if i else 10 for i in range(4)] for _ in range(4)]
    

    由于int 是不可变的,你也可以这样做:

    T = [[10] + [0] * 3  for _ in range(4)]
    

    【讨论】:

    • 非常感谢 Schwobaseggl
    【解决方案2】:

    要存储10,可以使用列表连接:

    T=[[10]+[0 for i in range(3)] for i in range(4)]
    

    输出:

    [[10, 0, 0, 0], [10, 0, 0, 0], [10, 0, 0, 0], [10, 0, 0, 0]]
    

    或者,在 Python3 中,您可以使用更简洁的列表解包 *

    T=[[10, *[0 for _ in range(3)]] for i in range(4)]
    

    输出:

    [[10, 0, 0, 0], [10, 0, 0, 0], [10, 0, 0, 0], [10, 0, 0, 0]]
    

    【讨论】:

    • 非常感谢阿贾克斯
    【解决方案3】:

    您可以使用内置的map 函数在每个子列表的开头分配10

    >>> l = [[0 for i in range(4)] for i in range(4)]
    >>> list(map(lambda x, y: x+y[1:], [[10]]*len(l), l))
    >>> [[10, 0, 0, 0], [10, 0, 0, 0], [10, 0, 0, 0], [10, 0, 0, 0]]
    

    【讨论】:

    • 非常感谢收藏家先生
    【解决方案4】:

    您可以尝试使用 lambda:

    list(map(lambda x:x.__setitem__(0,10),T))
    print(T)
    

    输出:

    [[10, 0, 0, 0], [10, 0, 0, 0], [10, 0, 0, 0], [10, 0, 0, 0]]
    

    【讨论】:

    • 非常感谢网络游戏
    猜你喜欢
    • 1970-01-01
    • 2021-09-12
    • 1970-01-01
    • 2021-11-09
    • 1970-01-01
    • 2022-11-28
    • 1970-01-01
    • 1970-01-01
    • 2011-07-27
    相关资源
    最近更新 更多