Проверьте, содержит ли строка строку кроме списка - PullRequest
0 голосов
/ 21 января 2020

У меня есть следующая строка:

f = 'ATCTGTCGTYCACGT'

Я хочу проверить, содержит ли строка какие-либо символы, кроме: A, C, G или T, и если да, , распечатайте их.

for i in f:                                                                                                                        
    if i != 'A' and i != 'C' and i != 'G' and i != 'T':                                                                             
        print(i)

Есть ли способ достичь этого без циклического перебора строки?

Ответы [ 4 ]

4 голосов
/ 21 января 2020

Вы можете использовать set для достижения желаемого результата.

f = 'ATCTGTCGTYCACGTXYZ'
not_valid={'A', 'C', 'G' , 'T'}
unique=set(f)
print(unique-not_valid)

выход

{'Y','X','Z'} #characters in f which are not equal to 'A','C','G','T'
3 голосов
/ 21 января 2020

В зависимости от размера вашей входной строки, for l oop может быть наиболее эффективным решением.

Однако, поскольку вы явно запрашиваете решение без явного l oop, это можно сделать с помощью регулярного выражения.

import re

f = 'ABCDEFG'

print(*re.findall('[^ABC]', f), sep='\n')

Выходы

D
E
F
G
0 голосов
/ 21 января 2020

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

accepted_values = ['a','t','c','g']

input = 'ATCTGTCGTYCACGT'

print([i for i in set(input.lower()) if i not in accepted_values])
0 голосов
/ 21 января 2020

Просто выполните

l = ['A', 'C', 'G', 'T']

for i in f:
    if i not in l:
        print(i)

Он проверяет, содержит ли список символ списка


Если вы не хотите, чтобы l oop через список вы можете сделать:

import re

l = ['A', 'C', 'G', 'T']

contains = bool(re.search("%s" % "[" + "".join(l) + "]", f))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...