2015-04-30 2 views
-2

У меня есть блок операторов if, elif и else. Оператор if сравнивает элемент в списке, затем выполняет операции с найденным элементом. Elif's и еще ничего не делают со списком, поэтому я не видел смысла вкладывать все это в цикл for.«За цикл» внутри «if» (который продолжает «elif») оператор

Я получаю сообщение об ошибке в первой строке, конечно, но есть Pythonic способ получить то, что я ищу, без необходимости перестраивать весь мой код?

+2

Неясно, что вы хотите делать с 'myItem' внутри отступающего блока. В приведенном выше примере 'myItem' является частью выражения генератора и не имеет никакого значения (или значения) вне этого выражения. –

+2

Если 'myText' имеет тип' str', то 'myItem для myItem в myList' лучше возвращать строку ... это не так, потому что она возвращает генератор. Что именно вы ищете? – TigerhawkT3

+0

Можете ли вы описать, что вы на самом деле хотите сделать, а не пытаться [устранить предполагаемое решение] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)? – TigerhawkT3

ответ

1

Если вы просто пытаетесь проверить, является ли или нет элемент в списке, простой способ сделать это:

if item in list: 
    do something 
+0

Я уже знаю, что элементы в списке будут иметь тип str, мне нужно что-то сделать с этим элементом, только если этот элемент найден в более крупной строке – rasonage

1
for myItem in myList : 
    if myItem in myText : 
     doSomething using myText and myItem 
    elif otherThing1: 
     doStuff 
    elif otherThing2: 
     doOther stuff 
    else: 
     forget this, go have a drink 
+0

У меня было это вначале, проблема была в elifs, а else выполнила бы несколько раз, когда они перебирались по списку, и я хочу, чтобы они выполнялись один раз после того, как весь список был зациклен и ничего не сделано. – rasonage

0

Ваши слова:
«Я пытаюсь см., если str внутри списка strs находится внутри более крупной str (myText), а затем выполняйте действия как с myItem, так и с myText. Я хочу, чтобы бит else был выполнен после того, как оператор if повторяется через все элементы myList и ничего не нашел ».

count = 0 
for myItem in mylist: 
    if myItem in myText: 
     count += 1 
     do something with myItem and myText 
if count == 0: 
    do what you want to do when if finds nothing 

Я не уверен, что вы пытаетесь сделать элиты? Вы ищете подстроку в большей строке. Он будет оценивать true или false. Зачем вам 4 логических утверждения?


Вы должны понимать, что если вы кладете если/другое заявление внутри цикла, то при каждом запуске цикла, это будет либо делать то, что имеет значение Истина или Ложь

+0

Я только хочу, чтобы бит «else» исполнялся после того, как оператор if повторил все элементы myList и ничего не нашел. – rasonage

+0

@rasonage это сработало? – lciamp

+1

да, но я закончил тем, что использовал вместо этого метод. – rasonage

Смежные вопросы