2015-12-19 2 views
-1

Моя функция всегда возвращает None, что здесь происходит?Почему эта функция не возвращает 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

знать местоположение элемента в списке вы можете использовать 'Az.index (пункт)', которые дают вам положение первое появление элемента внутри вашего списка, и если вы хотите, чтобы все позиции, вы можете использовать 'enumerate (Az)', которые возвращают список кортежей '(position, item)' – Copperfield

ответ

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 

Что может быть упрощена:

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) 
+1

, вы также можете сделать другое упрощение 'i> a и i Copperfield

+0

@Copperfield, True, спасибо, что упрощенное сравнение по цепочке более приятное –

+0

, это здорово, я выполнил первый код (до упрощенного). После запуска с «Аз» ​​в качестве списка он возвращает только 1 переменную в новом списке 25.2, но также предположил, что он должен быть вставлен в 89.3. (я сделал a и b как 10 и 300) append может вставить только 1 переменную в «новый» список? @PadraicCunningham –

2

в функции Первый if проверяет ли c является встроенным в типе list.

>>> list 
<type 'list'> 

Таким образом, проверка не будет верным и return new никогда не будет достигнута. В этом случае функция вернет значение по умолчанию None.

Чтобы проверить, является ли что-то список, используйте isinstance:

>>> c = [1,2,3] 
>>> c == list 
False 
>>> isinstance(c, list) 
True