我有一个字符串列表,如下所示,用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']
也许不是最好的方法,因为你必须反转原始列表和结果列表以获得正确的输出,但它适用于这个问题。
答案 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]