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

时间:2017-03-24 15:55:30

标签: python list append pop

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

5 个答案:

答案 0 :(得分:2)

为什么不使用

[v for v in xs if v >= 0]

答案 1 :(得分:1)

def extract_negatives(xs):
    new_home=[]
    for num in range(len(xs)):
        if xs[num] < 0:
            new_home.append(xs[num])
    return new_home

代码

但是Chuancong Gao的解决方案更好:

def extract_negative(xs):
    return [v for v in xs if v >= 0]

答案 2 :(得分:0)

辅助函数filter也可以提供帮助。你的功能实际上是

    new_home = filter(lambda x: x>=0, xs)

答案 3 :(得分:0)

在代码循环中,num变量并不真正存储您期望的列表值。循环只迭代len(xs)次,并将当前迭代次数传递给num变量。

要使用循环访问列表元素,您应该以不同的方式构造循环:

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

答案 4 :(得分:0)

幸运的是(或者不幸的是,取决于你如何看待它)你没有检查列表中的数字(xs[num]),你正在检查索引(num)< / em>的。这反过来是因为作为Python初学者,您可能还没有人知道通常有更简单的方法来迭代Python中的列表。

这是一个好的(或者不好,取决于你如何看待它)的事情,因为你的代码已经采用了那个分支,你会看到当你试图在列表中添加一个数字时发生异常 - 尽管我同意你尝试的方式在英语中看起来很自然。列表有append方法将新元素放在最后,+保留用于将两个列表放在一起。

幸运的是,无知是可以治愈的。我重新编写了一些代码,向您展示了如何编写代码:

def extract_negatives(xs):
    out_list = []
    for elmt in xs:
        if elmt < 0:
            out_list.append(elmt)
    return out_list

正如@ChuangongGoa用他相当简洁但正确的答案所暗示的那样,他使用的列表理解是执行此类简单操作的更好方法。