首页 > 解决方案 > 在也有字母的列表中将负值变为 0

问题描述

所以这里是交易。我有嵌套列表 - 列表的大部分是数字,但最后它们有用于标识列表的字母。

例如:

alist = [[0, -2, 3, 5, 10, -20, 'a'],[0, -4, 3, 30, 40, -15, 'a']]

我希望将其转换为:

alist = [[0, 0, 3, 5, 10, 0, 'a'],[0, 0, 3, 30, 40, 0, 'a']]

我知道如何使用 if 语句和 for 循环将负值变为 0,但是当列表中也存在字母时,我不知道如何以一种简洁的方式做到这一点。有任何想法吗?

标签: python-3.xif-statementnested-lists

解决方案


使用列表推导

前任:

alist = [[0, -2, 3, 5, 10, -20, 'a'],[0, -4, 3, 30, 40, -15, 'a']]
res = [[j if (isinstance(j, str) or (j > 0)) else 0 for j in i ]for i in alist]
print(res)

或者

alist = [[0, -2, 3, 5, 10, -20, 'a'],[0, -4, 3, 30, 40, -15, 'a']]
res = []

for i in alist:
    temp = []
    for j in i:
        if isinstance(j, str) or (j > 0):
            temp.append(j)
        else:
            temp.append(0)
    res.append(temp)

print(res)

输出:

[[0, 0, 3, 5, 10, 0, 'a'], [0, 0, 3, 30, 40, 0, 'a']]

笔记:

  • 用于isinstance检查对象。

推荐阅读