Python:创建一个函数,它接受一个整数和字符串列表,并返回一个过滤掉字符串的新列表



我是Python编程的新手,我正在努力解决一个非常简单的问题。论坛上也有同样的问题,但对javascript没有帮助。我的代码是:

def filter_list(l):  
for i in l:  
if i != str():  
l.append(i)  
i = i + 1  
return(l)  
print(filter_list([1,2,'a','b']))
If you can help!

感谢

在我提出解决方案之前,您需要了解一些问题。

str((

str()创建字符串类的一个新实例。只有当具有==的对象是同一字符串时,才将其与该对象进行比较。

print(1 == str())
>>> False
print("some str" == str())
>>> False
print('' == str())
>>> True

迭代器(no+1(

您的循环中有i = i + 1。这没有任何意义。i来自for i in l,意思是i在列表l的成员上循环。不能保证你能给它加1。在下一个循环中,i将有一个新的值

l = [1,2,'a']
for i in l:
print(i)
>>> 1
>>> 2
>>> 'a'

要筛选,您需要一个新列表

当您找到一个字符串时,您正在向l追加。这意味着,当循环找到一个整数时,它会将其附加到列表的末尾。稍后,它将在另一个循环迭代中找到那个整数。并将其再次附加到末尾。并在下一次迭代中找到它。。。。永远

试试看!亲眼目睹无限循环。

def filter_list(l):
for i in l:
print(i)
if type(i) != str:
l.append(i)
return(l)
filter_list([1,2,'a','b'])

修复1:修复类型检查

def filter_list(l):  
for i in l:  
if type(i) != str:  
l.append(i)  
return(l)  
print(filter_list([1,2,'a','b']))

如上所述,这个无限循环

修复2:创建一个新的输出数组以推送到

def filter_list(l):  
output = []
for i in l:  
if type(i) != str:  
output.append(i)  
return output
print(filter_list([1,2,'a','b']))
>>> [1,2]

好了。

修复3:在惯用python中执行

让我们使用列表理解

l = [1,2,'a','b']
output = [x for x in l if type(x) != str]
print(output)
>>> [1, 2]

如果右边的表达式(type(x) != str(为真,则列表理解为列表l中的每个元素返回最左边的表达式x

最新更新