簡體   English   中英

在子字符串 python 中拆分字符串

[英]Splitting a string in sub-strings python

有什么有效的方法可以不使用 [:] 切片來拆分這樣的序列嗎?

GATAAG  G  ATAAG
        GA  TAAG
        GAT  AAG
        GATA  AG
        GATAA  G

我在 itertools 中找到了一些東西,但做得不對:

def subslices(seq):
    "Return all contiguous non-empty subslices of a sequence"
    # subslices('ABCD') --> A AB ABC ABCD B BC BCD C CD D
    slices = itertools.starmap(slice, itertools.combinations(range(len(seq) + 1), 2))
    return map(operator.getitem, itertools.repeat(seq), slices)

list(subslices(s))
['G', 'GA', 'GAT', 'GATA', 'GATAA', 'GATAAG', 'A', 'AT', 'ATA', 'ATAA', 'ATAAG', 'T', 'TA', 'TAA', 'TAAG', 'A', 'AA', 'AAG', 'A', 'AG', 'G']

而且也不可讀。 其他解決方案:

def splitting_kmer(s):
    n = len(s)
    print(n)
    for i, _ in enumerate(s, 1):
        if i == n:
            break
        print(s[:n-i], s[n-i:])

保羅

獲取字符串的所有唯一子字符串的簡單有效的方法:

sample = 'GATAAG'

slices = set(sample[i:j] for i in range(len(sample)) for j in range(i+1, len(sample)))

print(slices)

結果:

{'AA', 'AT', 'GATA', 'A', 'GATAA', 'G', 'GA', 'TA', 'T', 'ATA', 'TAA', 'ATAA', 'GAT'}

它們是隨機順序的,因為它是一個集合(根據定義是無序的),並且它們在一個集合中以確保沒有重復。 如果您想要重復和訂購:

sample = 'GATAAG'

slices = [sample[i:j] for i in range(len(sample)) for j in range(i+1, len(sample))]

print(slices)

結果:

['G', 'GA', 'GAT', 'GATA', 'GATAA', 'A', 'AT', 'ATA', 'ATAA', 'T', 'TA', 'TAA', 'A', 'AA', 'A']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM