![](/img/trans.png)
[英]Python - Splitting numbers and letters into sub-strings with regular expression
[英]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.