如何将列表中的None值替换为int?

时间:2019-10-24 22:29:31

标签: python

在此处输入代码所以,基本上,我有一个带有int值的列表,我想看看List中缺少哪些值。为此,我正在将Value与1到9(range(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

4 个答案:

答案 0 :(得分:2)

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

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

这将打印{4, 7}

答案 1 :(得分:0)

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

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)

答案 2 :(得分:0)

范围函数将整数作为其参数。您不能将其传递为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]

答案 3 :(得分:0)

要求不是很明确,但我想您想比较值以列出并最终打印出丢失的数字。

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

剩下的只是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]
  

修改

现在我从评论中读到,您还希望添加缺失的数字来代替“无”项目。

这是一个更详细且易于理解的解决方案:

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]