首页 > 解决方案 > 如何检测列表项的特定值何时更改并通过与相应项的映射将索引捕获到字典中

问题描述

我有一个如下列表:

['24', '24', '24', '24', '24', '1D', '1D', '1D', **'1D'**, **'24'**, '24', '24', '1D', '1D','24','24']

我想检测项目何时从'1D'to更改,'24'并且我想将项目映射到其相应的索引。

与此示例一样,输出应如下所示:
{"1d":[8,13], "24":[9,14]}

标签: python

解决方案


那是你要的吗?

A = ['24', '24', '24', '24', '24', '1D', '1D', '1D', '1D', '24', '24', '24', '1D', '1D','24','24']
res = [[A[i], A[i + 1]] for i in range(len(A) - 1)] 
B = [index for index, value in enumerate(res) if value == ['1D','24']]
B
[8, 13] # feel free to add 1 if want to shift it to the second element position.

编辑:

使用numpy的解决方案:

import numpy as np
A = ['24', '24', '24', '24', '24', '1D', '1D', '1D', '1D', '24', '24', '24', '1D', '1D','24','24']
sequence = ['1D','24']
# get all sequences
res = [[A[i], A[i + 1]] for i in range(len(A) - 1)]
# find index of such sequence
B = np.array([[i,i+1] for i, v in enumerate(res) if v == sequence]).T

# create an dict with sequences elements as keys and their 
# values as list of indexes:
mydict = {sequence[i]: list(B[i]) for i in range(len(sequence))} 


>>> mydict
{'1D': [8, 13], '24': [9, 14]}


更多阅读:

“列表理解”是什么意思?它是如何工作的,我该如何使用它?
https://www.learnpython.org/en/List_Comprehensions
https://www.geeksforgeeks.org/python-consecutive-elements-pairing-in-list/ ...


推荐阅读