我有一個字符串'RTKLOANGMSTTTS'和元組列表[(2,5),(8,9)],它返回一個字符串,其中包含字母2-5和8- 9包括在內,即'TKLOGM'。 我的想法是這樣的:找到字符串中的列表的元素
def f(string, lst):
for element in lst:
if element in string:
print string
但它不會返回任何東西?
我有一個字符串'RTKLOANGMSTTTS'和元組列表[(2,5),(8,9)],它返回一個字符串,其中包含字母2-5和8- 9包括在內,即'TKLOGM'。 我的想法是這樣的:找到字符串中的列表的元素
def f(string, lst):
for element in lst:
if element in string:
print string
但它不會返回任何東西?
試試這個:
def f(source, lst):
return "".join(source[start - 1:end] for start, end in lst)
這是什麼會做的是遍歷lst
,在每個迭代上提取解析成start
和end
。然後它會創建一個新的字符串作爲source
字符串的一個片段,從start - 1
到end
(我們使用start - 1
,因爲您顯示1表示第一個字符,但python使用0-索引,因此我們必須減去一個)。最後,我們使用"".join()
加入所有字符串。
如果您使用Python的舊版本不支持發電機的語法,而不是使用:
def f(source, lst):
return "".join([source[start - 1:end] for start, end in lst])
它的工作原理完全一樣,但不是與發電機的工作它明確創建一個列表它被加入。
這將不會給出OP所需的答案,你將擁有`KLOAMS`,而不是`TKLOGM` .... – 2011-12-15 08:30:38
我認爲這是你要求的。我現在不能測試,但嘗試:
def f(string, lst):
getStr = ''
for t in lst:
begin, end = t
getStr += string[begin-1:end]
return getStr
>>> x = 'RTKLOANGMSTTTS'
>>> l = [(2,5),(8,9)]
>>> ''.join(x[s-1:e] for (s,e) in l)
'TKLOGM'
def f(string, lst):
for start, end in lst:
s = string[start-1:end]
if s:
yield s
for s in f('RTKLOANGMSTTTS', [(2,5),(8,9)]):
print s
所以,你要切片,在列表中的元組字符串?如果這就是你需要的東西,那麼在python中很容易。 – Matt 2011-12-15 08:27:18