group = range(1, 1001)
for num in group:
num_length = len(str(num))
for i in range(num_length):
if str(num)[i] == '1' or str(num)[i] == '7':
group.remove(num)
except ValueError:
pass
else:
pass
我正在尝试删除包含1或7位数的数字。避免
"ValueError: list.remove(x): x not in list"
,我添加了"except ValueError: pass"
。但是,我现在有"SyntaxError: invalid syntax"
。
答案 0 :(得分:2)
首先,range
个对象是不可变的,这意味着您无法从range
对象中删除元素。此外,现在可以从迭代的序列中删除元素。
其次,except
块必须与try
块相关,该块包含可能生成except
捕获的错误的代码。
我建议你创建一个包含你想要保留的元素的新列表(其中没有1和7)。您还可以使用in
运算符简化对包含1和7的检查。
group = range(1, 1001)
data = []
for num in group:
s = str(num)
if not ('1' in s or '7' in s):
data.append(num)
print(data)
答案 1 :(得分:1)
except
是名为try-except
的特殊块的一部分。这是一个使用示例:
n = int(input())
try:
print(5 // n)
except ZeroDivisionError:
print("You entered zero!")
因此,为了使您的块实际捕获引发的异常,您需要包装可能导致try
块中的异常的部分,并使用一个或多个except
块进行跟踪,如下所示:
for num in group:
num_length = len(str(num))
for i in range(num_length):
if str(num)[i] == '1' or str(num)[i] == '7':
try:
group.remove(num)
except ValueError:
pass
else:
pass
答案 2 :(得分:1)
如果您使用除了您还需要尝试。有关详细信息,请查看documentation on error handling。
此外,要检查字符是否在字符串中,您可以使用in关键字。
另外,在迭代它时更改列表会产生奇怪的效果。因此,您应该在第一次运行中收集要删除的所有数字,然后迭代数字列表以删除并从列表中删除它们。
最后你无法从一个范围对象中删除,只能从列表中删除,这就是你必须把它变成一个的原因。最终的代码看起来像这样:
group = list(range(1, 100))
to_remove = []
for num in group:
if '1' in str(num) or '7' in str(num):
to_remove.append(num)
for num in to_remove:
try:
group.remove(num)
except ValueError:
pass
print(group)
编辑:正如Donkey Kong指出的那样,它也可以使用pythons列表理解来完成,并检查数字中是否有1或7可以使用内置任何函数来完成。这样,它也很容易检查更多和其他数字。 Donkey Kong提供的代码如下所示:
group = [x for x in range(1, 100) if not any(s in str(x) for s in ['1', '7'])]
print(group)
编辑2:使用if而不是列表中的任何理解更快。这是由juanpa.arrivillaga指出的。这是他的代码:
group = [x for x in range(1,100) if not ('7' in str(x) or '3' in str(x))]
print(group)
答案 3 :(得分:0)
ValueError
显示您尝试在列表中删除的元素不在列表中。您必须使用try
和execpt
。这就是它显示invalid syntax
的原因。
try:
#Your action
except ValueError:
pass
但你可以像这样实施你的问题。检查筛选列表的前10个元素。
In [1]: num = range(1, 1001)
In [2]: filtered_num = [i for i in num if '1' not in str(i) and '7' not in str(i)]
In [3]: filtered_num[0:10]
Out[1]: [2, 3, 4, 5, 6, 8, 9, 20, 22, 23]