如何用int替换列表中的None值



在这里输入代码所以,基本上我有一个包含int值的列表,我想看看list中缺少哪些值。为此,我将Value与从1到9的范围(范围(1.9((进行比较。

matrix = [None, 8, 3, 9, 2, 1, 6, 5, None]

当我运行这个代码时:

for row in matrix:
if range(1,9) not in row :
print(row)
else:
print('wrong logic')

我收到这个错误

TypeError: 'NoneType' object cannot be interpreted as an integer

我们可以将其视为两个集合的差异,一个集合包含所有感兴趣的数字,另一个集合则包含列表中的数字。你所需要做的就是用列表中的值减去所有数字的集合。

list = [None, 8, 3, 9, 2, 1, 6, 5, None] 
missing_numbers = set(range(1,9)) - set(list)
print(missing_numbers)

这将打印{4, 7}

在评估范围是否在列表中之前,从列表中删除Nones。

start_list = [None, 8, 3, 9, 2, 1, 6, 5, None]
new_list = [item for item in start_list if item is not None]

然后检查新列表中的数字1-9。

另一种在不删除None的情况下做到这一点的方法是,只需循环数字1-9,并检查它们是否在列表中。

start_list = [None, 8, 3, 9, 2, 1, 6, 5, None]
missing = []
for num in range(1,10):
if num not in start_list:
missing.append(num)
print(missing)
range函数以整数为参数。不能将None值传递给它。您可以先将None值转换为零。
my_list = [None, 8, 3, 9, 2, 1, 6, 5, None]
my_list = [item if item else 0 for item in my_list]
print(my_list)

输出

[0, 8, 3, 9, 2, 1, 6, 5, 0]

要求不是很清楚,但我想您想比较列出的值,并最终打印缺失的数字。

获取list_to_check中缺失值的一种可能方法是比较其条目是否存在于good_values中,如果存在,则将其从good_value中删除。

剩下的只是list_to_check中缺少的条目。

list_to_check = [None, 8, 3, 9, 2, 1, 6, 5, None]
good_values = list(range(1, len(list_to_check) + 1))
for number in list_to_check:
if number in good_values:
good_values.remove(number)
print(good_values)

输出

[4, 7]

编辑

现在我从评论中看到,您还想添加缺失的数字来代替None项。

这里有一个更详细、更易于理解的解决方案:

list_to_check = [None, 8, 3, 9, 2, 1, 6, 5, None]
good_values = list(range(1, len(list_to_check) + 1))
for number in list_to_check:
if number in good_values:
good_values.remove(number)
result = []
for value in list_to_check:
if value is None:
result.append(good_values.pop())
else:
result.append(value)
print(result)

输出:

[7, 8, 3, 9, 2, 1, 6, 5, 4]

出于我不完全理解的原因,如果你在Python代码中没有使用列表理解,你就是不酷。

那我们也冷静点吧!

以下是针对同一问题的较短解决方案:

list_to_check = [None, 8, 3, 9, 2, 1, 6, 5, None]
good_values = list(range(1, len(list_to_check) + 1))
for number in list_to_check:
if number in good_values:
good_values.remove(number)
print([good_values.pop() if value is None else value for value in list_to_check])

输出

[7, 8, 3, 9, 2, 1, 6, 5, 4]

最新更新