Python 如何获取列表中某个项目之后出现的项目数

Python 如何获取列表中某个项目之后出现的项目数,python,list,Python,List,我有一个类似下面的字符串列表,是用Python编写的。我现在要做的是在每个字符串“hello”之后获取字符串“you”的出现次数。然后,输出应该类似于前两个“hello”的数字0,第三个“hello”的数字2,第四个“hello”的数字1,依此类推 有人知道该怎么做吗 my_list = ['hello', 'hello', 'hello', 'you', 'you', 'hello', 'you', 'hello', 'you', 'you', 'you', ...]

我有一个类似下面的字符串列表,是用Python编写的。我现在要做的是在每个字符串“hello”之后获取字符串“you”的出现次数。然后,输出应该类似于前两个“hello”的数字0,第三个“hello”的数字2,第四个“hello”的数字1,依此类推

有人知道该怎么做吗

my_list = ['hello', 'hello', 'hello', 'you', 'you', 'hello', 'you', 'hello', 
           'you', 'you', 'you', ...]
更新:

虽然Karan Elangovans的方法也有效,但我自己解决了这个问题:

我就是这样做的:

list_counter = []
counter = 0

# I reverse the list because the loop below counts the number of 
# occurences of 'you' behind each 'hello', not in front of it
my_list_rev = reversed(my_list)

for m in my_list_rev:
    if m == 'you':
        counter += 1
    elif m == 'hello':
        list_counter.append(counter)
        counter = 0

# reverse the output to match it with my_list     
list_counter = list(reversed(list_counter))

print(list_counter)
这将产生:

[0, 0, 2, 1, 3]
用于:

可能不是最好的方法,因为您必须反转原始列表和列表的结果以获得正确的输出,但它可以解决此问题。

尝试以下一种方法:

reduce(lambda acc, cur: acc + ([] if cur[1] == 'you' else [next((i[0] - cur[0] - 1 for i in list(enumerate(my_list))[cur[0]+1:] if i[1] == 'hello'), len(my_list) - cur[0] - 1)]), enumerate(my_list), [])
它将给出一个数组,其中第n个元素是在第n次出现“hello”之后的“you”的编号

e、 g。 如果我的清单=[“你好”,“你好”,“你好”,“你”,“你”,“你好”,“你”,“你好”,“你”,“你好”,“你”,“你”,“你”]


它将给出:[0,0,2,1,3]

或者尝试编写代码,就像您向其他人解释过程一样,然后编辑您的问题,向我们展示您的尝试,以获得可能更好的答案。@johncolman不是家庭作业。这是我很好奇的事情,因为我不想手动计算每次“你好”之后出现“你”的次数。谢谢,我自己解决了这个问题,但是你的代码也运行得很好。
reduce(lambda acc, cur: acc + ([] if cur[1] == 'you' else [next((i[0] - cur[0] - 1 for i in list(enumerate(my_list))[cur[0]+1:] if i[1] == 'hello'), len(my_list) - cur[0] - 1)]), enumerate(my_list), [])