我是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
。