Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何返回由python中另一个列表中提取的元素组成的列表?_Python_List_Append - Fatal编程技术网

如何返回由python中另一个列表中提取的元素组成的列表?

如何返回由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

我正在构建一个函数,从一个名为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 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