2015-08-17 5 views
1
lst = ['a', 'b', 'c', 'aa', 'bb', 'cc'] 

def findexact(lst): 
    i=0 
    key = ['a','g','t'] 
    while i < len(lst): 
     if any(item in lst[i] for item in key): 
      print lst[i] 
     i+=1 

findexact(lst) 

в приведенном выше коде, результат выходит быть:Python - Возвращает значение, если существует «точное» совпадение?

'a' 
'aa' 

Я хотел бы результат быть:

'a' 

Что такое правильный способ использовать any(), чтобы получить правильный результат?

+1

Что вы пытаетесь сделать? – Cyphase

+1

Печать '' a'' и "return True" - это не одно и то же. Какой вы хотите? – TigerhawkT3

+0

Упс. Сожалею. Я писал сообщение, затем я изменил код, чтобы напечатать «a». Я забыл изменить название. – niamleeson

ответ

1

Чтобы соответствовать вашему ожидаемому результату, вы не можете использовать set.intersection в качестве множества неупорядоченного так что если вы получаете a в качестве первого пункта она полностью случайно, вы должны сделать key набор и использовать in, итерацию по списку возвращающегося первый матч, который будет держать заказ:

def findexact(lst): 
    key = {'a','g','t'} 
    for ele in lst: 
     if ele in key: 
      return ele 
    return False 

Если вы хотите, чтобы получить все матчи и увидеть не являющиеся матчи просто сделать ключевой набор и использовать цикл:

def findexact(lst): 
    key = {'a','g','t'} 
    for ele in lst: 
     if ele in key: 
      print(ele) 
     else: 
      # do whatever 

Если вы хотите вернуть логическое значение в зависимости от того есть какой-либо общий элемент использует set.isdisjoint:

def findexact(lst): 
    key = {'a','g','t'} 
    return not key.isdisjoint(lst) 

Если есть хотя бы один матч, то функция возвращает истину, если нет, то множества не пересекаются, так это вернет False.

Если вы хотите использовать индекс перечислю:

def findexact(lst): 
    key = {'a','g','t'} 
    for ind,ele in enumerate(lst): 
     if ele in key: 
      return ind, ele 
    return False 

Это будет возвращать как элемент и индекс, если есть совпадение, если вы просто хотите, индекс просто вернуть ind, ни по игре, мы просто вернуться False

+0

Есть ли способ получить индекс точного соответствия? Если в «lst» есть только одно совпадение – niamleeson

+0

@niamleeson, перечисление даст вам индекс –

2

Основываясь на моей интерпретации вашего вопроса, похоже, что вы хотите найти, какой элемент находится в key, находится в lst. Это было бы способом сделать это:

def findexact(lst): 
    key = ['a','g','t'] 
    for k in key: 
     if k in lst: 
      print k 
      return k 
2

Вам не нужно делать всю эту индексацию.

def findexact(lst): 
    key = ['a','g','t'] 
    for item in (set(key) & set(lst)): 
     return item 
+0

Побей меня; Я собирался сказать, что вы не должны «печатать» внутри функции, если это не является целью функции, или вы отлаживаете ее. – Cyphase

+0

Есть ли способ использовать «для элемента в (set (key) & set (lst))» с инструкцией if? Если есть совпадение, сделайте что-нибудь. – niamleeson

+0

Несомненно - сохраните его, а затем проверьте. 'myset = (set (key) & set (lst))', 'if myset: ...'. – TigerhawkT3

1
lst = ['a', 'b', 'c', 'aa', 'bb', 'cc'] 
def findexact(lst): 
    i=0 
    key = ['a','g','t'] 
    for eachItm in lst: 
     if eachItm in key: 
      print eachItm 

findexact(lst) 

Это должно делать то, что вы пытаетесь

2

Самый простой способ заключается в использовании Python встроенный в пересечение множеств:

lst = ['a', 'b', 'c', 'aa', 'bb', 'cc'] 
key = ['a','g','t'] 

for item in set(lst).intersection(key): 
    print item 

Выходной

 
a 

Полагая, что в функцию, которая возвращает точные совпадения:

def findexact(lst): 
    key = ['a','g','t'] 
    return set(lst).intersect(key) 

Или в функцию, которая возвращает True, если есть хотя бы один точное совпадение:

def findexact(lst): 
    key = ['a','g','t'] 
    return bool(set(lst).intersect(key)) 
+0

Есть ли способ использовать set(). Intersect() с выражением if? например, если есть совпадение, что-то делать? – niamleeson

+0

Да, просто выполните: 'if set (lst) .intersect (key): напечатать« точное совпадение! » – mhawke

1

Это:

item in lst[i] for item in key 

ищет каждый элемент ключа внутри каждого элемента списка. И находит «внутри» a и внутри «aa». Он не находит «g» или «t» внутри любого элемента lst.