我有如下的元组列表:
list_1 = [(2,10), (3,13), (5,23)]
还有以下字符串列表:
list_2 = [ATGCATGCGAGTGCGAGTGCGTGCGTGCAGTGCGAGTGC,
ATCGTCGTCGACGTAGCTAGCTAGCTAGCTAGCTAS,
ATGCGTACGATCGATCGATCGATCGATCGAGCTAGCTAGCT]
我想借助给定的元组整数间隙对字符串列表进行切片。例如;
我想从索引2和10中切出第一个字符串,只打印出属于那些索引的字母。因此结果打印将为“ GCATGCGAG”。
对于第二个字符串,它应切片并从3-13中选择索引。因此结果应为“ GTCGTCGACGTAG”。这应该继续。有人可以为此建议我一个代码。预先感谢。
一种简单的解决方案是压缩两个列表,并将一个列表中的元组元素用作另一个列表的切片参数:
[l2[l1[0] : l1[1] + 1] for l1, l2 in zip(list_1, list_2)]
#['GCATGCGAG', 'GTCGTCGACGT', 'TACGATCGATCGATCGATC']
如果元组的第二个元素是子序列结束后的next元素(这是“常规” Python约定),则可以获得更优雅的解决方案:
[l2[slice(*l1)] for l1, l2 in zip(list_1, list_2)]
#['GCATGCGA', 'GTCGTCGACG', 'TACGATCGATCGATCGAT']
您可以使用功能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']
使用它来执行所需的操作:字符串[num1:num2]
要全部打印,需要此:
for i in range(len(list_1)):
print(list_2[i][list_1[i][0]:list_1[i][1] +1])
希望该问题已解决,
具有良好的代码:)
您可以使用列表理解来实现这一点:
list_3 = [item[list_1[int(index)][0]:list_1[int(index)][1]] for index,item in enumerate(list_2)]
上面的代码将从list_2到元素中取一个元素并使用它作为索引,并在list_1中使用它,然后根据list_1的元组对元素进行切片。
它是如何工作的: