如何借助元组列表对字符串进行切片?

问题描述 投票:0回答:4

我有如下的元组列表:

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

还有以下字符串列表:

list_2 = [ATGCATGCGAGTGCGAGTGCGTGCGTGCAGTGCGAGTGC,
          ATCGTCGTCGACGTAGCTAGCTAGCTAGCTAGCTAS,
          ATGCGTACGATCGATCGATCGATCGATCGAGCTAGCTAGCT]

我想借助给定的元组整数间隙对字符串列表进行切片。例如;

我想从索引2和10中切出第一个字符串,只打印出属于那些索引的字母。因此结果打印将为“ GCATGCGAG”。

对于第二个字符串,它应切片并从3-13中选择索引。因此结果应为“ GTCGTCGACGTAG”。这应该继续。有人可以为此建议我一个代码。预先感谢。

python python-3.x list slice
4个回答
2
投票

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

[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']

2
投票

您可以使用功能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']

0
投票

使用它来执行所需的操作:字符串[num1:num2]

要全部打印,需要此:

for i in range(len(list_1)):
    print(list_2[i][list_1[i][0]:list_1[i][1] +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的元组对元素进行切片。

它是如何工作的:

  1. 从列表_2一项一一接受
  2. 使用索引从list_1中获取元组
  3. 使用元组的切片项目
  4. 将其存储在list_3中
© www.soinside.com 2019 - 2024. All rights reserved.