我有一个字符串'RTKLOANGMSTTTS'和一个元组列表,[(2,5),(8,9)],它返回一个包含字母2-5和8-9的字符串,包括'TKLOGM'。 我想的是:
def f(string, lst):
for element in lst:
if element in string:
print string
但是它没有返回任何东西?
答案 0 :(得分:4)
试试这个:
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])
它的工作方式完全相同,但它不是使用生成器,而是显式创建一个连接的列表。
答案 1 :(得分:2)
>>> x = 'RTKLOANGMSTTTS'
>>> l = [(2,5),(8,9)]
>>> ''.join(x[s-1:e] for (s,e) in l)
'TKLOGM'
答案 2 :(得分:0)
我认为这就是你所要求的。我现在无法测试,但请尝试:
def f(string, lst):
getStr = ''
for t in lst:
begin, end = t
getStr += string[begin-1:end]
return getStr
答案 3 :(得分:0)
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