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

时间:2017-11-26 17:58:39

标签: python list

我有一个字符串列表,如下所示,用Python编写。我现在要做的是获得字符串的出现次数'你'在每个字符串之后'你好'。输出应该是前两个'你好的数字0,第三个' hello'的数字2,第四个' hello&#1的数字1 39;等等。

有谁知道怎么做到这一点?

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]

有:

my_list = ['hello', 'hello', 'hello', 'you', 'you', 'hello', 'you', 'hello', 
           'you', 'you', 'you']

也许不是最好的方法,因为你必须反转原始列表和结果列表以获得正确的输出,但它适用于这个问题。

1 个答案:

答案 0 :(得分:-1)

试试这个单行:

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'之后的数字。

e.g。 如果my_list = ['hello', 'hello', 'hello', 'you', 'you', 'hello', 'you', 'hello', 'you', 'you', 'you']

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