Python:找到第一个x的索引,然后找到第二个x的索引

时间:2019-05-21 16:02:27

标签: python

我试图遍历一个列表,找到x的第一次出现的索引和x的第二次出现的索引。

我有以下列表:

int_list = [1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 8, 7, 6, 14, 15, 15, 17, 17, 14, 20, 20, 5, 23, 23, 25, 26, 26, 28, 28, 25, 31, 32, 32, 31, 35, 35, 4, 3, 39, 39, 41, 42, 42, 44, 44, 41, 47, 47, 2, 50, 50, 1, 53, 54, 55, 56, 57, 58, 58, 60, 60, 62, 62, 57, 65, 66, 67, 67, 66, 65, 56, 72, 73, 74, 75, 75, 74, 78, 78, 73, 72, 82, 83, 83, 85, 85, 82, 55, 89, 90, 91, 92, 93, 93, 92, 91, 90, 98, 99, 99, 98, 102, 103, 103, 102, 106, 106, 89, 109, 109, 54, 112, 113, 113, 112, 116, 116, 53, 119, 120, 121, 121, 120, 119, 0, 126, 127, 128, 128, 130, 131, 131, 130, 127, 135, 135, 126]

我想从索引0(它是1)开始,因为这是第一次出现,将它分配给first_index,然后搜索列表的其余部分,直到找到另一个位于索引1的1,依此类推。

我知道我需要使用enumerate(),它会循环遍历我的列表并允许我找到索引,但是我在寻找如何找到第一个和第二个匹配项方面很费劲

例如:

for i, e in enumerate(int_list):
    # if e 'is the first occurrence':
         first_index = i
    # else e is second occurrence:
         second_index = i

我不知道如何确定e是第一次出现还是第二次出现

我尝试了以下代码:

for i in int_list:

    first_ind = firstInt_ls.index(i, 0)
    second_ind = firstInt_ls.index(i, first_ind+1)

    print(first_ind)
    print(second_ind)

除非只有一次出现,否则它将起作用。如果没有第二次出现,则会产生ValueError:列表中没有10

1 个答案:

答案 0 :(得分:1)

使用列表的index()函数,其中第一个参数是您要查找的元素,第二个参数是要从其开始的索引。也许是这样的:

a = [1, 2, 3, 1, 4, 5, 6, 1, 5]

first_ind_of_one = a.index(1, 0)
second_ind_of_one = a.index(1, first_ind_of_one+1)

print(first_ind_of_one)
print(second_ind_of_one)

下面的代码,用于当我们不知道列表中元素是否出现以及出现多少时的情况:

occurrences_needed = 2
list_of_inds = []
for ind, elem in enumerate(a):
    if len(list_of_inds) == occurrences_needed:
        break
    if elem == 1:
        list_of_inds.append(ind)

print(list_of_inds)

只是为了好玩,我添加了第三种方法,该方法更易于阅读,但对于大型列表而言可能效率不高(可能需要进行一些测试):

s = ''.join(str(i) for i in a)
first_ind = s.find('1')
second_ind = s.find('1', first_ind + 1)
print(first_ind)
print(second_ind)

这会将列表转换为字符串,并使用字符串的find()方法。如果找不到元素,则此方法仅返回-1。因此,您可能必须在代码中进行检查。