如何在元组列表的帮助下切分字符串?

2024-10-06 07:36:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个元组列表如下:

list_1 = [(2,10), (3,13), (5,23)]

以及以下字符串列表:

list_2 = [ATGCATGCGAGTGCGAGTGCGTGCGTGCAGTGCGAGTGC,
          ATCGTCGTCGACGTAGCTAGCTAGCTAGCTAGCTAS,
          ATGCGTACGATCGATCGATCGATCGATCGAGCTAGCTAGCT]

我想在给定的元组整数间隔的帮助下对字符串列表进行切片。 例如:

我想从索引2和10中切分第一个字符串,只打印出属于这些索引的字母。所以结果打印为“GCATGCGAG”。你知道吗

对于第二个字符串,它应该切片并从3-13中选择索引。因此结果应该是“gtcgtcggatag”。 这应该继续下去。 有人能给我一个密码吗。 提前谢谢。你知道吗


Tags: 字符串密码列表间隔字母切片整数list
3条回答

使用它做你想做的事情:string[num1:num2]

要全部打印,您需要:

for i in range(len(list_1)):
    print(list_2[i][list_1[i][0]:list_1[i][1] +1])

希望问题解决了

有一个好代码:)

您可以使用函数map

list_1 = [(2,10), (3,13), (5,23)]

list_2 = ['ATGCATGCGAGTGCGAGTGCGTGCGTGCAGTGCGAGTGC',
          'ATCGTCGTCGACGTAGCTAGCTAGCTAGCTAGCTAS',
          'ATGCGTACGATCGATCGATCGATCGATCGAGCTAGCTAGCT']

list(map(lambda idx, lst: lst[idx[0]: idx[1]+1], list_1, list_2))
# ['GCATGCGAG', 'GTCGTCGACGT', 'TACGATCGATCGATCGATC']

一个简单的解决方案是压缩两个列表,并使用一个列表中的元组元素作为另一个列表的切片参数:

[l2[l1[0] : l1[1] + 1] for l1, l2 in zip(list_1, list_2)]
#['GCATGCGAG', 'GTCGTCGACGT', 'TACGATCGATCGATCGATC']

如果元组的第二个元素是子序列结束后的下一个元素(这是一个“正常”的Python约定),那么您可以得到一个更优雅的解决方案:

[l2[slice(*l1)] for l1, l2 in zip(list_1, list_2)]
#['GCATGCGA', 'GTCGTCGACG', 'TACGATCGATCGATCGAT']

相关问题 更多 >