Python:根据另一个列中的值更新列表中的列

时间:2019-01-03 12:55:37

标签: python

假设我有以下列表:

list = [["A",0,"C"],["B",1,"C"]]

我想做一些事情来完成以下任务:将第一列中的值设置为等于“ D”,其中第二列中的值等于0。

因此更新后的列表应如下所示:

list = [["D",0,"C"],["B",1,"C"]]

1 个答案:

答案 0 :(得分:1)

不建议为变量list命名,因为它会遮盖内置函数list()

如果要执行此操作,请使用索引:

lst = [["A", 0 ,"C"],["B", 1 ,"C"]]

for i in range(len(lst)):
    if lst[i][1] == 0:
        lst[i][0] = "D"

print(lst)
# [['D', 0, 'C'], ['B', 1, 'C']]

否则,您可以使用列表理解重建列表:

print([["D", y, z] if y == 0 else [x, y ,z] for x, y, z in lst])
# [['D', 0, 'C'], ['B', 1, 'C']]

您也可以通过这种方式进行操作而无需打开包装:

print([["D"] + sublst[1:] if sublst[1] == 0 else sublst for sublst in lst])
# [['D', 0, 'C'], ['B', 1, 'C']]

也没有什么可以阻止您正常进行此操作:

newlst = []
for sublst in lst:
    if sublst[1] == 0:
        newlst.append(["D"] + sublst[1:])
        continue
    newlst.append(sublst)

print(newlst)
# [['D', 0, 'C'], ['B', 1, 'C']]

可能性列表还在继续(无双关)。

同样在Python中,bool(0)的计算结果为False,因此您可以 在此处使用not而不是显式检查== 0。您可以决定是否值得使用,因为空类型和序列(例如""[](){}等)也将得出False测试真实性时。