查找列表中任何项目首次出现的索引

时间:2018-07-13 08:38:43

标签: python string

对于示例中显示的列表:

my_list = ['hi', 'babe', 'hi', 'babe', 'key', 'key']

output = [0, 1, 4]

output =[1, 1, 0, 0, 1, 0]

4 个答案:

答案 0 :(得分:2)

将列表转到集合,然后使用.index

output = [my_list.index(elem) for elem in set(my_list)]

由于set是无序的,因此您可能需要对输出进行排序:

output = sorted(my_list.index(elem) for elem in set(my_list))

完整示例:

>>> my_list = ['hi', 'babe', 'hi', 'babe', 'key', 'key']         
>>> output = sorted(my_list.index(elem) for elem in set(my_list))
>>> output                                                       
[0, 1, 4]   

答案 1 :(得分:2)

您可以使用ArFragment arFragment = (ArFragment) getSupportFragmentManager().findFragmentById(R.id.ux_fragment); arFragment.getArSceneView().getPlaneRenderer().setVisible(false); 来跟踪已经看到的元素,并使用循环或列表推导来获取每个元素是否为同类中的第一个。然后,使用defaultConfig { ... multiDexEnabled true ... } 获取索引。

set

答案 2 :(得分:2)

您还可以在字典中收集索引,该字典中仅记录每个项目的第一次出现:

HarmonyModules : true

collections.OrderedDict()用于维持插入顺序。

答案 3 :(得分:0)

该列表具有内置函数.index:

my_list = ['hi', 'babe', 'hi', 'babe', 'key', 'key']
my_list.index('hi')
>>>0

.index按顺序搜索列表,直到找到匹配项并停止。如果您希望需要更多匹配项的索引,则应使用列表推导。首先,您可能希望将文本转换为数字(数字列表不需要),例如hi = 0,babe = 1等。这应该做到(可能是更好的方法):

unique_words_list = []
number_list = []
for word in my_list:
    if word not in unique_words_list:
    unique_words_list.append(word)
for i in range(len(my_list)):
    for j in range(len(unique_words_list)):
        if my_list[i]==unique_words_list[j]:
            number_list.append(j)


unique_words_list, number_list    
>>>(['hi', 'babe', 'key'], [0, 1, 0, 1, 2, 2])    

然后您的列表理解:

[i for i, e in enumerate(number_list) if e == 1]
>>>[1,3]

这意味着您在列表的第1和第3位有一个“婴儿”。

可能是更简单的方法!希望这会有所帮助。