我正在构建一个函数来从名为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
答案 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用他相当简洁但正确的答案所暗示的那样,他使用的列表理解是执行此类简单操作的更好方法。