假設我有一串隨機生成的值,
string = 'ZlgKgIvhPGClfDtmaXjtqQMohOiNZuGaKwSyKsHAcAmpfDXOTUZIfwOvmlotZrquFDFvIvOZ'
以及一些作為元組串列的位置,
pxn = [(2, 10), (13, 20)]
其中元組表示字串的開始和結束位置。
我一直在嘗試撰寫一個函式,該函式將根據給定的位置回傳字串的段,所以它看起來像這樣
segment = ['lgKgIvhPG','fDtmaXjt']
我曾嘗試過這樣做,
def find_region(string):
" function that returns the string in segments by starting and ending positions provided"
for code, start, end in list:
if index.string == start:
if index.string == end:
return code
這顯然不起作用,但我真的不知道如何進一步進行。
編輯:假設字串和 pxn 是存在于字典中的鍵,看起來像這樣
{'string':'ZlgKgIvhPGClfDtmaXjtqQMohOiNZuGaKwSyKsHAcAmpfDXOTUZIfwOvmlotZrquFDFvIvOZ', 'pxn': [(2, 10), (13,20)]}
那么將如何解決這個問題呢?任何幫助將非常感激。謝謝你。
uj5u.com熱心網友回復:
你可以用這個。
string = 'ZlgKgIvhPGClfDtmaXjtqQMohOiNZuGaKwSyKsHAcAmpfDXOTUZIfwOvmlotZrquFDFvIvOZ'
pxn = [(2, 10), (13, 20)]
segments = [string[start:end] for start,end in pxn]
print(segments)
輸出
['gKgIvhPG', 'DtmaXjt']
由于 python 中的編號從 0 開始,這意味著 0 指向串列的第一個索引。但是如果你想讓 1 指向串列的第一個索引,那么你可以使用這個。
string = 'ZlgKgIvhPGClfDtmaXjtqQMohOiNZuGaKwSyKsHAcAmpfDXOTUZIfwOvmlotZrquFDFvIvOZ'
pxn = [(2, 10), (13, 20)]
segments = [string[start-1:end] for start,end in pxn]
print(segments)
但是,如果用戶給出的值小于零 (0) 或大于字串的長度,則需要謹慎。那么這段代碼不能完美運行,那么你需要使用這個。
string = 'ZlgKgIvhPGClfDtmaXjtqQMohOiNZuGaKwSyKsHAcAmpfDXOTUZIfwOvmlotZrquFDFvIvOZ'
pxn = [(2, 10), (13, 20)]
segments = [string[start:end] for start,end in pxn if start>=0 and end<len(string)]
print(segments)
uj5u.com熱心網友回復:
您可以使用帶有串列推導的字串切片來生成所需的輸出:
[string[start - 1:end] for start, end in pxn]
這輸出:
['lgKgIvhPG', 'fDtmaXjt']
uj5u.com熱心網友回復:
通過鏈接函式。希望有助于理解所需的陳述句流:
- 將間隔轉換為切片物件
- 將切片應用于字串(字串支持對值的類似串列的訪問)
itertools.starmap需要正確“饋送”函式的引數slice。
import itertools as it
string = 'ZlgKgIvhPGClfDtmaXjtqQMohOiNZuGaKwSyKsHAcAmpfDXOTUZIfwOvmlotZrquFDFvIvOZ'
pxn = [(2, 10), (13, 20)]
slices = map(string.__getitem__, it.starmap(slice, pxn))
print(list(slices))
# ['gKgIvhPG', 'DtmaXjt']
備注:由于字串的長度定義為 ,因此與子字串的起點/終點的概念不匹配len = end - start。在這種情況下,pxn可以預處理:
...
x, y = zip(*pxn)
x = map(int(1).__rsub__, x)
slices = map(string.__getitem__, it.starmap(slice, zip(x, y)))
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/464571.html
