gpt4 book ai didi

如果元组中的第二项是顺序的,Python 从元组中提取索引

转载 作者:行者123 更新时间:2023-12-05 06:04:02 27 4
gpt4 key购买 nike

我有一个元组列表,该列表是从另一个列表中的某些项目生成的。如果第二个元组项是连续的,我想获取列表中的索引(元组中的第一项)。

例如名为“已处理”的列表

[(1, 'Chip 1'),
(1, 'Chip 2'),
(1, 'Chip 3'),
(2, 'Chip 4'),
(4, 'Chip 1'),
(4, 'Chip 2'),
(4, 'Chip 3'),
(4, 'Chip 4'),
(5, 'Chip 5'),
(7, 'Chip 1'),
(7, 'Chip 2'),
(7, 'Chip 3'),
(7, 'Chip 4'),
(8, 'Chip 5'),
(10, 'Chip 1'),
(10, 'Chip 2'),
(10, 'Chip 3'),
(12, 'Chip 1'),
(12, 'Chip 2'),
(14, 'Chip 1'),
(16, 'Chip 1'),
(16, 'Chip 2'),
(18, 'Chip 1'),
(18, 'Chip 2'),
(20, 'Chip 1'),
(20, 'Chip 2'),
(20, 'Chip 3'),
(20, 'Chip 4'),
(23, 'Chip 1'),
(25, 'Chip 1'),
(27, 'Chip 1'),
(27, 'Chip 2')]

我可以使用 more_itertools 获取顺序列表中的芯片,但我不知道如何进一步处理它。谁能帮我算一下?

import more_itertools as mit
chip_nums = [int(p[1][-1]) for p in processed]
for group in mit.consecutive_groups(chip_nums):
print(list(group))

[1, 2, 3, 4]
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
[1, 2, 3]
[1, 2]
[1]
[1, 2]
[1, 2]
[1, 2, 3, 4]
[1]
[1]
[1, 2]

最佳答案

groups 包含 processed 列表中连续的元素(包括开始和结束)的索引。
注意:一些元组包含相同/相等的开始和结束值,表示没有连续性。

groups = []
start = 0
for i in range(len(processed) - 1):
if int(processed[i][1].split()[-1]) + 1 == int(
processed[i + 1][1].split()[-1]
): # checks if the next element is 1 greater than previous element
pass
else:
groups.append((start, i)) # stores the start and ending index of a continuous group
start = i + 1
groups.append((start, i + 1)) # this handles the last remaining element

index_list = [[item[0] for item in processed[start : end + 1]] for start, end in groups]

输出:

[[1, 1, 1, 2], [4, 4, 4, 4, 5], [7, 7, 7, 7, 8], [10, 10, 10], [12, 12], [14], [16, 16], [18, 18], [20, 20, 20, 20], [23], [25], [27, 27]]

关于如果元组中的第二项是顺序的,Python 从元组中提取索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66474072/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com