我们需要创建一个函数,它接受一个非负整数和字符串列表,并返回一个包含过滤字符串的新列表 | 代码大战
例子:filter_list([1,2,'a','b']) == [1,2]
我编写了以下代码,但它没有通过所有测试(第三个在修复时会引发错误)。
def filter_list(l):
new_l = []
for i in range (len(l)):
try:
int(l[i])
new_l.append(l[i])
except ValueError:
continue
return new_l
测试:
import codewars_test as test
from solution import filter_list
@test.describe('Sample tests')
def sample_tests():
@test.it('should work for basic examples')
def basic_examples():
test.assert_equals(filter_list([1, 2, 'a', 'b']), [1, 2], 'For input [1, 2, "a", "b"]')
test.assert_equals(filter_list([1, 'a', 'b', 0, 15]), [1, 0, 15], 'Fot input [1, "a", "b", 0, 15]')
test.assert_equals(filter_list([1, 2, 'aasf', '1', '123', 123]), [1, 2, 123], 'For input [1, 2, "aasf", "1", "123", 123]')
从第三个测试来看,'123' 形式的字符串被认为是字符串,应该被跳过,而在你的情况下,它们已成功转换为 int 并添加。
您需要检查当前元素是否已经是 int 类型,这样做是这样的:
通过列表生成器解决(其中满足条件的值将被添加到列表中
isinstance(item, int))
:我还建议您使用内置函数 enumerate 而不是 range (len (l)) ,例如:
其中,i 是元素的索引,item 是值本身。