在这里输入代码所以,基本上我有一个包含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}
。
在评估范围是否在列表中之前,从列表中删除None
s。
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)
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]