2016-07-15 4 views
1

Я изучаю python и пытаюсь использовать некоторые тернарные операторы.Python - петля внутри тернарного оператора

Я пытаюсь сделать функцию ниже с использованием трехкомпонентной:

def array_count9(nums): 
    count = 0 
    for i in nums: 
     if i == 9: 
      count += 1 
    return count 

Я пробовал:

def array_count9(nums): 
    count = 0 
    count += 1 if i == 9 for i in nums else pass 
    return count 

который бросил SyntaxError, то после поисков я нашел this и изменил код за то, что я считал лучшим заказом:

def array_count9(nums): 
    count = 0 
    count += 1 if i == 9 else pass for i in nums 
    return count 

По-прежнему принимает SyntaxError, который указывает на for. Я также пытался использовать круглые скобки в разных местах.

Я посмотрел вокруг и есть и другие родственные темы, такие как this и this, что привело меня попробовать это:

def array_count9(nums): 
    count = 0 
    count += 1 if i == 9 else count == count for i in nums 
    return count 

Я также пробовал другие ресурсы, с помощью поиска Google, но я не могу вполне работает. Пожалуйста, научите меня.

Благодаря

ответ

1

Я думаю, что это самый идиоматических способ писать код:

def array_count9(nums): 
    return sum(num == 9 for num in nums) 

Но вы также можете сделать это, если вы хотите использовать, если/еще конструкция:

def array_count9(nums): 
    return sum(1 if num == 9 else 0 for num in nums) 
+0

Привет, это работает, однако я до сих пор не понимаю, почему то, что я использовал, не работает. Вы можете объяснить? –

+0

@ JakeStokes Я не уверен, как объяснить ... Я думаю, что все ваши попытки были просто синтаксическими ошибками? Понимание списков в Python приводит к итератору значений ...нет ничего похожего на то, что вы пытались сделать. – smarx

+0

Хм .. кажется, люди делают то, что я пытаюсь сделать [здесь] (http://stackoverflow.com/questions/25319053/python-inline-if-statement-else-do-nothing), но я могу «Сделай это. Можете ли вы подтвердить, что я делаю что-то другое? –

1

Концепция тройного оператора:

condition_is_true if condition else condition_is_false 

Оператора, где происходит ошибка синтаксиса в

count += 1 if i == 9 else pass for i in nums 

т.е. count += 1 не соответствует спецификации плана, потому что condition_is_true не должна быть оценена.

+0

Итак, потратив много времени, вы помогли мне понять, почему это не сработает. Большое спасибо @nnja –

0

Хорошо, поэтому ваши примеры были немного сложными, потому что тройной оператор не может включать ничего вне его конкретного плана; это цикл for, который вы пытаетесь передать с ним.

count += 1 if i == 9 for i in nums else pass 

Таким образом, после возиться с кодом:

def array_count9(nums): 
count = 0 
count += 1 if i == 9 for i in nums else pass 
return count 

Я был уверен, что вы искали что-то, что работает с участием тройных операторов и цикл. Поэтому, сохраняя вашу цель, это то, что я придумал.

numss = [3,6,9,10,35] 

def count9(nums): 
    count = 0 
    a = count + 1 
    for i in nums: 
     count = (a if i == 9 else count) #This being the ternary operator 
    return count 

print (count9(numss)) 

Надеюсь, это поможет.