如何找到索引中的值,在列表中增加值?

2024-06-26 10:00:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个如下列表:

mot = [0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,0,0,0]

我需要将元素从0更改为1(而不是从1更改为0)时的索引附加到列表中

我尝试了以下操作,但是当它从1变为0时,它也会注册

i = 0 
while i != len(mot)-1:
    if mot[i] != mot[i+1]:
        mot_daily_index.append(i)
    i += 1

还有,但并不重要的是,是否有一个更干净的实施方案


Tags: 元素列表indexlenifdailyappendwhile
3条回答

你可以用

lst = [0, 0, 0, 1, 1, 1, 0, 1]
#      0  1  2  3  4  5  6  7

for index, (x, y) in enumerate(zip(lst, lst[1:])):
    if x == 0 and y == 1:
        print("Changed from 0 to 1 at", index)

产生

Changed from 0 to 1 at 2
Changed from 0 to 1 at 6

下面是如何通过列表理解来实现这一点:

mot = [0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,0,0,0]
mot_daily_index = [i for i,m in enumerate(mot) if i and m and not mot[i-1]]
print(mot_daily_index)

输出:

[7, 24]

说明:

  • list(enumerate([7,5,9,3]))将返回[(0, 7), (1, 5), (2, 9), (3, 3)],因此i for i, m in enumerate中的i是该迭代期间m的索引

使用带有筛选器的列表理解来获取索引:

mot = [0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,0,0,0]

idx = [i for i,v in enumerate(mot) if i and v > mot[i-1]]
print(idx)

输出:

[7, 24]

相关问题 更多 >