我的函数总是返回None
,这里发生了什么?
Az= [5,4,25.2,685.8,435,2,8,89.3,3,794]
new = []
def azimuth(a,b,c):
if c == list:
for i in c:
if i > a and i < b:
new.append(i)
return new
d=azimuth(10,300,Az)
print d
此外,如果有人知道如何将这些数字的位置提取到不同的列表,那将非常有用。
答案 0 :(得分:4)
if c == list:
正在检查c
是否为type
即list
如果if i > a and i < b:
永远不会评估为True
您将永远无法联系到return None
因此默认情况下返回语句为Az = [5,4,25.2,685.8,435,2,8,89.3,3,794]
def azimuth(a,b,c):
new = []
if isinstance(c ,list):
for i in c:
if a < i < b:
new.append(i)
return new # return outside the loop unless you only want the first
,因为所有python函数都没有指定返回值,我想你想要这样的东西:
def azimuth(a, b, c):
if isinstance(c, list):
return [i for i in c if a < i < b]
return [] # if c is not a list return empty list
可以简化为:
enumerate
如果您希望索引也使用def azimuth(a, b, c):
if isinstance(c, list):
return [(ind,i) for i, ind in enumerate(c) if a < i < b]
return []
:
def azimuth(a,b,c):
inds, new = [], []
if isinstance(c ,list):
for ind, i in enumerate(c):
if a < i < b:
new.append(i)
inds.append(ind)
return new,inds #
如果你想单独购买它们:
new, inds = azimuth(10, 300, Az)
然后解压缩:
Model.findOne({'email':'test@test.com'},function(err, note){
note.notes.push(newNote);
note.save(function(err){});
});
答案 1 :(得分:2)
该函数中的第一个if
正在检查c
是否为内置类型list
。
>>> list
<type 'list'>
因此,支票不会成立,永远不会达到return new
。
在这种情况下,该函数将返回默认值None
。
要检查某些内容是否为列表,请使用isinstance
:
>>> c = [1,2,3]
>>> c == list
False
>>> isinstance(c, list)
True