2016-12-31 38 views
-2

。如果给出该列表:(为“intensity_array”说明)如何在Python中对列表建立索引以提取字符串存在的多个点?例如,

['High', 'Moderate', 'Moderate', 'High', 'Moderate', 'Moderate', 'High', 'High', 'High', 'High', 'High', 'High', 'High', 'High', 'High', 'Moderate', 'Moderate', 'Moderate', 'Moderate', 'Moderate', 'Moderate', 'Moderate', 'Moderate', 'Moderate', 'Moderate'] 

当我使用函数intensity_array.index(“高”)的输出,因为在主位置0变为0。这不是不正确,则价值很高。但是,列表中的其他地方的值为“高”。

我将如何能够从列表中提取位置编号,如下所示:0,3,6,7,8,9,10,11,12,13,14。这样他们可以在以后的代码中使用?

谢谢:)

(这个问题是不会复制它已经问过,但问题的所有其他实例实际上并不完全回答这个问题。)

注:不使用外部或附加模块。

+1

如果你想争议重复,你应该陈述**为什么**它不能完全回答你的问题。在我看来,他们非常相似,答案也适用于你的情况。 – MSeifert

回答

1

列表理解

[i for i, x in enumerate(your_array) if x == 'High'] 
+0

这个输出是什么?当我将它放入我的代码中时,我什么都没有得到。 – Alex

+0

适用于这个特定的问题,这是如何工作的: – Alex

0

这是做这件事:

high_indices = [i for i, x in enumerate(intensity_array) if x == 'High'] 
print(high_indices) 

如果要多次查询索引它可能是一个好主意,将它们存储在一个字典:

from collections import defaultdict 

indices = defaultdict(list) 
for index, name in enumerate(intensity_array): 
    indices[name].append(index) 

print(indices['High']) 
print(indices['Moderate']) 

这样你只需要对列表进行一次迭代,剩下的查找就会很快。

0

enumerate是有帮助的是:

def get_positions(iterable, item): 
    """Get the indices of the given iterable where item occurs""" 
    positions = [] 
    for idx, x in enumerate(iterable): 
     if x == item: 
      positions.append(idx) 
    return positions 
0
from collections import defaultdict 
d = defaultdict(list) 
l = ['High', 'Moderate', 'Moderate', 'High', 'Moderate', 'Moderate', 'High', 'High', 'High', 'High', 'High', 'High', 'High', 'High', 'High', 'Moderate', 'Moderate', 'Moderate', 'Moderate', 'Moderate', 'Moderate', 'Moderate', 'Moderate', 'Moderate', 'Moderate'] 
for index, value in enumerate(l): 
    d[value].append(index) 

出来:

defaultdict(list, 
      {'High': [0, 3, 6, 7, 8, 9, 10, 11, 12, 13, 14], 
      'Moderate': [1, 2, 4, 5, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]}) 

NO库版本:

d = {} 
l = ['High', 'Moderate', 'Moderate', 'High', 'Moderate', 'Moderate', 'High', 'High', 'High', 'High', 'High', 'High', 'High', 'High', 'High', 'Moderate', 'Moderate', 'Moderate', 'Moderate', 'Moderate', 'Moderate', 'Moderate', 'Moderate', 'Moderate', 'Moderate'] 
for index,value in enumerate(l): 
    d.setdefault(value,[]).append(index) 

出来:

{'High': [0, 3, 6, 7, 8, 9, 10, 11, 12, 13, 14], 
'Moderate': [1, 2, 4, 5, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]} 
+0

该问题指出不应该使用额外的模块。 – Alex

+0

@Alex我在他更新这个条件之前回答。 –