wolverine777
@wolverine777

Как убрать ненужные мне элементы из list?

Привет, мне нужно посчитать сколько в моей последовательности повторов и выдать их в виде list-a.

Я делаю это следующим образом например:

from collections import Counter

s = "XXXXXXAGCCTGCCAAGCAAACTTCACTGGAGXXXXXXTGTGCGTAGCATGCTAGTAACTGCAXXXXXXTCTGAATCTTTCAGCTGCTTGTXXXXXXTGGGCCTCTCACAAGGCAGAGTGTCTTCATGGGACTTTGATATTTATTTTTGTACAACCTAAGAGGAACAAATCCTTTGACACTGACAAATTGGCTTCCATATTTTATACCTTAATCATCTCCATGTTGAATTCATTGATCAACAGTTTAAGAAAAAAAGATGTAAAAATGCTTTTAGAAAGAGAGGCAAAGTTATGCACAATAACTTCTCATGAAGTCACAGTTTGTTAAAAGTTGCCTTAGTTCACAATAAATAATTATGTATGCTCTATAATTTCAGTGA"

def chunk_string(s, n):
    return [s[i:i+n] for i in range(len(s)-n+1)]

counter = Counter(chunk_string(s, 6))

Далее создаю list:

your_list = [list(i) for i in counter.items()]

и далее фильтрую по количеству повторений (все что повторяется 2 или более раза - оставить, остальное - в мусор):

for i in your_list:
    if i[1]<2:
        your_list.remove(i)
        
your_list


Проблема в том что полностью профильтровать лист получается лишь после 5-6 повторов (когда длина уменьшается с 354 до 18)

Как сделать так чтобы сразу убралось все что встречается 1 раз? Спасибо
  • Вопрос задан
  • 77 просмотров
Решения вопроса 1
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
wolverine777 ,
если уж вам нужны все повторы любых встречающихся последовательностей, то вот вам мой
велосипедик
s = "XXXXXXAGCCTGCCAAGCAAACTTCACTGGAGXXXXXXTGTGCGTAGCATGCTAGTAACTGCAXXXXXXTCTGAATCTTTCAGCTGCTTGTXXXXXXTGGGCCTCTCACAAGGCAGAGTGTCTTCATGGGACTTTGATATTTATTTTTGTACAACCTAAGAGGAACAAATCCTTTGACACTGACAAATTGGCTTCCATATTTTATACCTTAATCATCTCCATGTTGAATTCATTGATCAACAGTTTAAGAAAAAAAGATGTAAAAATGCTTTTAGAAAGAGAGGCAAAGTTATGCACAATAACTTCTCATGAAGTCACAGTTTGTTAAAAGTTGCCTTAGTTCACAATAAATAATTATGTATGCTCTATAATTTCAGTGA"
import re
viewed = {}
for i, _ in enumerate(s):
    n = 0
    while n <= (len(s)-i):
        new_string = s[i:i+n]
        n += 1
        if len(new_string) > 1:
            if new_string not in viewed:
                matches = re.split(new_string, s)
                counter = len(matches) - 1
                if counter > 1:
                    viewed.update({new_string: counter})
print(viewed)

Результат
{'AA': 30,
 'AAA': 10,
 'AAAA': 3,
 'AAAAA': 2,
 'AAAAG': 2,
 'AAAG': 4,
 'AAAGA': 2,
 'AAAGT': 2,
 'AAAGTT': 2,
 'AAAT': 4,
 'AAC': 6,
 'AACA': 2,
 'AACT': 3,
 'AACTT': 2,
 'AACTTC': 2,
 'AAG': 9,
 'AAGA': 4,
 'AAGAG': 2,
 'AAGT': 3,
 'AAGTT': 2,
 'AAT': 11,
 'AATA': 3,
 'AATAA': 2,
 'AATC': 3,
 'AATT': 4,
 'AC': 17,
 'ACA': 9,
 'ACAA': 6,
 'ACAAA': 2,
 'ACAAAT': 2,
 'ACAAT': 2,
 'ACAATA': 2,
 'ACAATAA': 2,
 'ACAG': 2,
 'ACAGT': 2,
 'ACAGTT': 2,
 'ACAGTTT': 2,
 'ACC': 2,
 'ACCT': 2,
 'ACT': 6,
 'ACTG': 3,
 'ACTT': 3,
 'ACTTC': 2,
 'AG': 24,
 'AGA': 6,
 'AGAA': 2,
 'AGAAA': 2,
 'AGAG': 3,
 'AGAGG': 2,
 'AGC': 4,
 'AGCA': 2,
 'AGG': 3,
 'AGGC': 2,
 'AGGCA': 2,
 'AGT': 9,
 'AGTG': 2,
 'AGTT': 5,
 'AGTTT': 2,
 'AT': 29,
 'ATA': 7,
 'ATAA': 4,
 'ATAAT': 2,
 'ATAATT': 2,
 'ATAT': 2,
 'ATATT': 2,
 'ATATTT': 2,
 'ATC': 5,
 'ATCA': 2,
 'ATCT': 2,
 'ATG': 9,
 'ATGC': 4,
 'ATGCT': 3,
 'ATGT': 3,
 'ATGTA': 2,
 'ATT': 8,
 'ATTG': 2,
 'ATTT': 4,
 'ATTTT': 2,
 'CA': 29,
 'CAA': 10,
 'CAAA': 4,
 'CAAAT': 2,
 'CAAC': 2,
 'CAAG': 2,
 'CAAT': 2,
 'CAATA': 2,
 'CAATAA': 2,
 'CAC': 6,
 'CACA': 4,
 'CACAA': 3,
 'CACAAT': 2,
 'CACAATA': 2,
 'CACAATAA': 2,
 'CACT': 2,
 'CACTG': 2,
 'CAG': 5,
 'CAGT': 3,
 'CAGTT': 2,
 'CAGTTT': 2,
 'CAT': 7,
 'CATG': 4,
 'CC': 9,
 'CCA': 3,
 'CCAT': 2,
 'CCT': 6,
 'CCTT': 3,
 'CCTTA': 2,
 'CT': 25,
 'CTA': 3,
 'CTC': 4,
 'CTCA': 2,
 'CTCT': 2,
 'CTG': 6,
 'CTGA': 2,
 'CTGC': 3,
 'CTT': 11,
 'CTTA': 2,
 'CTTC': 4,
 'CTTCA': 2,
 'CTTT': 4,
 'CTTTG': 2,
 'CTTTGA': 2,
 'GA': 18,
 'GAA': 6,
 'GAAA': 2,
 'GAAT': 2,
 'GAC': 3,
 'GACA': 2,
 'GAG': 4,
 'GAGG': 2,
 'GAT': 3,
 'GC': 17,
 'GCA': 6,
 'GCAA': 2,
 'GCAAA': 2,
 'GCC': 4,
 'GCCT': 3,
 'GCT': 6,
 'GCTT': 3,
 'GG': 7,
 'GGA': 3,
 'GGC': 4,
 'GGCA': 2,
 'GGG': 2,
 'GT': 18,
 'GTA': 5,
 'GTAA': 2,
 'GTC': 2,
 'GTG': 3,
 'GTT': 7,
 'GTTA': 2,
 'GTTG': 2,
 'GTTT': 2,
 'TA': 24,
 'TAA': 10,
 'TAAA': 3,
 'TAAAA': 2,
 'TAAC': 2,
 'TAACT': 2,
 'TAAG': 2,
 'TAAGA': 2,
 'TAAT': 3,
 'TAATT': 2,
 'TAC': 2,
 'TAG': 4,
 'TAGT': 2,
 'TAT': 8,
 'TATA': 2,
 'TATG': 3,
 'TATGC': 2,
 'TATT': 3,
 'TATTT': 2,
 'TATTTT': 2,
 'TC': 21,
 'TCA': 11,
 'TCAC': 4,
 'TCACA': 3,
 'TCACAA': 2,
 'TCAG': 2,
 'TCAT': 4,
 'TCATG': 2,
 'TCC': 3,
 'TCCA': 2,
 'TCCAT': 2,
 'TCT': 7,
 'TCTC': 3,
 'TCTCA': 2,
 'TCTT': 2,
 'TG': 29,
 'TGA': 8,
 'TGAA': 3,
 'TGAAT': 2,
 'TGAC': 2,
 'TGACA': 2,
 'TGAT': 2,
 'TGC': 9,
 'TGCA': 2,
 'TGCC': 2,
 'TGCT': 4,
 'TGCTT': 2,
 'TGG': 4,
 'TGGG': 2,
 'TGT': 8,
 'TGTA': 3,
 'TGTT': 2,
 'TT': 29,
 'TTA': 9,
 'TTAA': 3,
 'TTAG': 2,
 'TTAT': 4,
 'TTATG': 2,
 'TTC': 8,
 'TTCA': 6,
 'TTCAC': 2,
 'TTCAG': 2,
 'TTCAT': 2,
 'TTG': 9,
 'TTGA': 4,
 'TTGAT': 2,
 'TTGT': 3,
 'TTT': 10,
 'TTTA': 4,
 'TTTAT': 2,
 'TTTC': 2,
 'TTTCA': 2,
 'TTTCAG': 2,
 'TTTG': 4,
 'TTTGA': 2,
 'TTTGT': 2,
 'TTTT': 3,
 'TTTTA': 2,
 'XT': 3,
 'XTG': 2,
 'XX': 12,
 'XXT': 3,
 'XXTG': 2,
 'XXX': 8,
 'XXXT': 3,
 'XXXTG': 2,
 'XXXX': 4,
 'XXXXT': 3,
 'XXXXTG': 2,
 'XXXXX': 4,
 'XXXXXT': 3,
 'XXXXXTG': 2,
 'XXXXXX': 4,
 'XXXXXXT': 3,
 'XXXXXXTG': 2}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@molekulyarniy
# ваша строка
s = "XXXXXXAGCCTGCCAAGCAAACTTCACTGGAGXXX"

# лист для повторяющихся символов
list = []

# а какие вообще символы встречаются в строке?
includedLetters = ''.join(set(s))

# для каждого символа в строке считать количество повторений
for letter in includedLetters:
  count = s.count(letter)
  # повторяется больше одного раза? добавляем в лист
  if count > 1:
    list.append(letter)
    
print(list)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Сбер Санкт-Петербург
от 100 000 до 100 000 ₽
Ovision Санкт-Петербург
от 100 000 до 300 000 ₽
11 мая 2021, в 06:08
10000 руб./за проект
11 мая 2021, в 00:46
10000 руб./за проект
10 мая 2021, в 23:47
1119 руб./за проект