Bel*_*gor 3 python algorithm list
假设我们有以下列表:
sequence = ['2', '4', '1', '2', '3', '4', '2', '4', '2', '4', '4']
#indices 0 1 2 3 4 5 6 7 8 9 10
Run Code Online (Sandbox Code Playgroud)
接下来,我们有以下列表:
key_list = ['2', '2', '4']
Run Code Online (Sandbox Code Playgroud)
现在,我想提取所有可能的子列表sequence,保留其顺序keylist,即其索引.
让我举例说明.因此,对于sequence保留顺序的所有可能的索引子列表key_list是:
[0, 3, 5]
[0, 3, 7]
[0, 3, 9]
[0, 3, 10]
[0, 6, 7]
[0, 6, 9]
[0, 6, 10]
[0, 8, 9]
[0, 8, 10]
[3, 6, 7]
[3, 6, 9]
[3, 6, 10]
[3, 8, 9]
[3, 8, 10]
[6, 8, 9]
[6, 8, 10]
Run Code Online (Sandbox Code Playgroud)
有什么建议?
编辑:我正在使用一个大数据集,我必须为文件的每一行执行此操作,所以我正在寻找一种非常优化的方法来做到这一点,通过避免蛮力方法(制作所有可能的序列组合)
PS我不知道问题的标题是否合适,如果您有更好的标题,请随时更改.
你可以用itertools.combinations它.适用combinations()于enumerate(sequence)(与r=len(key_list))来获取列表中的所有R-长度的组合,由于enumerate()回报指数以及项目我们都可以很容易地在这里得到的指标:
>>> from itertools import combinations
>>> for c in combinations(enumerate(sequence), len(key_list)):
indices, data = zip(*c)
if list(data) == key_list:
print indices
...
(0, 3, 5)
(0, 3, 7)
(0, 3, 9)
(0, 3, 10)
(0, 6, 7)
(0, 6, 9)
(0, 6, 10)
(0, 8, 9)
(0, 8, 10)
(3, 6, 7)
(3, 6, 9)
(3, 6, 10)
(3, 8, 9)
(3, 8, 10)
(6, 8, 9)
(6, 8, 10)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
163 次 |
| 最近记录: |