如何将已排序的列表分为该列表的连续元素的开始和结束的元组?

or

假设我的排序列表是这样的:

L = ["01-string","02-string","03-string","05-string","07-string","08-string"]

如您所见,此列表已排序。我现在希望此列表中连续字符串的每个块的起点和终点,例如,此输出应为:

L_continuous = [("01-string", "03-string"),("05-string","05-string"),("07-string","08-string")]

因此,为了澄清起见,我需要一个元组列表,并且在每个这些元组中,我都需要列表中每个连续块的起点和终点。因此,例如,我列表中的元素0、1和2是连续的,因为01,02,03是连续的数字-因此起始点和终结点将是“ 01字符串”和“ 03字符串”。

数字1-3是连续的,因此它们形成一个块,而数字5在列表中没有任何连续的数字,因此它本身就形成了一个块。

kaya3

首先要做的是从字符串数据中提取一个int,以便我们可以比较连续的数字

def extract_int(s):
    return int(s.split('-')[0])

然后,一个直接的解决方案是跟踪最后看到的数字,并在与上一个数字不连续时发出一个新块。在循环的最后,我们需要发出一个“剩余”的块。

def group_by_blocks(strs):
    blocks = []
    last_s = first_s = strs[0]
    last_i = extract_int(last_s)

    for s in strs[1:]:
        i = extract_int(s)
        if i != last_i + 1:
            blocks.append( (first_s, last_s) )
            first_i, first_s = i, s
        last_i, last_s = i, s

    blocks.append( (first_s, last_s) )
    return blocks

例:

>>> group_by_blocks(L)
[('01-string', '03-string'), ('05-string', '05-string'), ('07-string', '08-string')]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将列表拆分为元组

如何将元组列表拆分为列表元组?

创建包含元组的列表的子列表,并将子列表的开始和结束元素作为元组

如何将列表中的连续元素拆分为子列表

Java集合:如何将已排序的列表划分为子列表

如何根据开始和结束元素从列表创建子列表?

如何从已排序的流列表中连续查看最低元素

如何在链接列表[(a,b),(b,c),(c,d)]中的开始和结束值时对元组进行排序?

Python在开始和结束关键字模式下将列表拆分为子列表

如何将列表元素与元组元素匹配?

将每个数组列表/列表元素拆分为整数和字符串的元组

按特定元素和该元素的子字符串对元组列表进行排序

如何将列表元素转换为字典/元组?Python

如何将Int列表转换为表示连续范围的元组列表

从两个列表开始,如何将每个列表中相同索引的元素放入一个元组列表中

如何从开始剥离引号和列表的结束

如何将列表与公共元素合并,这些元素本身就是列表/元组?

如何将元组的元组转换为列表列表?

如何将Python列表转换为包括边缘项的连续元组?

如何将列表拆分为具有相同元素的多个列表

如何将逗号分隔的部分列表元素拆分为新列表?

如何将列表拆分为按元素分组的子列表

如何将列表的元组内的元素转换为二维列表

Haskell:如何将列表转换为列表,其中每个元素都是其在列表中的位置和原始数据的元组?

如何将列表分为几个部分

从列表的开始和结束处递归地删除元素

Python将列表拆分为给定开始/结束关键字的子列表

如何找到列表中元素的开始和结束的单词索引?蟒蛇

如何在python中自动查找列表中元素的开始和结束索引