如何返回由python中另一个列表中提取的元素组成的列表?
我正在构建一个函数,从一个名为xs的列表中提取所有负片,我需要它将这些提取的数字添加到另一个名为new_home的列表中。然而,我已经想出了一个我认为应该有效的代码;它只显示一个空列表 输入/输出示例: xs=[1,2,3,4,0,-1,-2,-3,-4]-->new_home=[1,2,3,4,0] 以下是返回空列表的代码:如何返回由python中另一个列表中提取的元素组成的列表?,python,list,append,Python,List,Append,我正在构建一个函数,从一个名为xs的列表中提取所有负片,我需要它将这些提取的数字添加到另一个名为new_home的列表中。然而,我已经想出了一个我认为应该有效的代码;它只显示一个空列表 输入/输出示例: xs=[1,2,3,4,0,-1,-2,-3,-4]-->new_home=[1,2,3,4,0] 以下是返回空列表的代码: def extract_negatives(xs): new_home=[] for num in range(len(xs)): if
def extract_negatives(xs):
new_home=[]
for num in range(len(xs)):
if num <0:
new_home= new_home+ xs.pop(num)
return
return new_home
def extract_负片(xs):
新家=[]
对于范围内的num(len(xs)):
如果num为什么不使用
[v for v in xs if v >= 0]
助手函数过滤器也会有帮助。你的函数实际上是
new_home = filter(lambda x: x>=0, xs)
在代码的循环中,num变量并不像您期望的那样存储列表的值。循环只迭代len(xs)
次,并将当前迭代次数传递给num
变量
要使用loop访问列表元素,您应该以不同的方式构造loop,如下所示:
for element in list_name:
print element #prints all element.
为了实现你的目标,你应该这样做:
another_list=[]
for element in list_name:
if(element<0): #only works for elements less than zero
another_list.append(element) #appends all negative element to another_list
另一个_列表=[]
对于列表名称中的元素:
如果(element幸运地(或者不幸地,取决于您如何看待它)您没有检查列表中的数字(xs[num]
),那么您正在检查索引(num
)这是因为作为一名Python初学者,您可能还没有认识到在Python中迭代列表通常有更简单的方法
这是一个好的(或坏的,取决于你如何看待它)事情是这样的,因为如果你的代码采用了这个分支,当你试图向列表中添加一个数字时,你会看到一个异常发生——尽管我同意你尝试的方式在英语中似乎很自然。列表有一个append
方法来将新元素添加到末尾,而+
是为将两个列表添加在一起而保留的
幸运的是,无知是可以治愈的。我对您的代码进行了一点重铸,以向您展示您可能是如何编写它的:
def extract_negatives(xs):
out_list = []
for elmt in xs:
if elmt < 0:
out_list.append(elmt)
return out_list
def extract_负片(xs):
out_list=[]
对于xs中的elmt:
如果elmt<0:
out_list.append(elmt)
返回列表
正如@Chuanggoa用他简洁但正确的答案所建议的那样,他使用的列表理解是执行此类简单操作的更好方法。你的or语句体中有一个空返回语句。此外,你的算法以二次时间运行,因为你使用的方式。。pop
我没有学过我对这一点很陌生,我的尝试也反映了这一点。我想,这就是为什么我在文章中加入了很多解释。我希望你至少知道你现在哪里出了问题。学习编程最困难的事情之一是习惯你经常出错。但当你最终做到正确时,会有很大的回报!
another_list=[]
for element in list_name:
if(element<0): #only works for elements less than zero
another_list.append(element) #appends all negative element to another_list
def extract_negatives(xs):
out_list = []
for elmt in xs:
if elmt < 0:
out_list.append(elmt)
return out_list