在此处输入代码所以,基本上,我有一个带有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
答案 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]