Python 按事件排序

Python 按事件排序,python,string,list,sorting,Python,String,List,Sorting,给定字符串列表arr和字符/单词w,编写函数s_sortarr,w,根据w在列表字符串中出现的次数对列表进行排序 arr=['q','q','q','a'] w=‘q’ 索塔尔,w 将提供: ['q','q','q','q','a'] 及 arr=['bug'、'bug bug'、'bug bug bug'] w=‘bug’ 索塔尔,w 将提供: ['bug','bug','bug','bug',] 上面的代码应该可以工作 上面的代码应该可以工作。试试这个: arr = ['bug', 'bug

给定字符串列表arr和字符/单词w,编写函数s_sortarr,w,根据w在列表字符串中出现的次数对列表进行排序

arr=['q','q','q','a'] w=‘q’ 索塔尔,w 将提供:

['q','q','q','q','a'] 及

arr=['bug'、'bug bug'、'bug bug bug'] w=‘bug’ 索塔尔,w 将提供:

['bug','bug','bug','bug',] 上面的代码应该可以工作

上面的代码应该可以工作。

试试这个:

arr = ['bug', 'bug bug', '#', 'bug bug bug bug']
w = 'bug'
out = sorted(arr, key=lambda item: -item.split().count(w))
print(out)  # -> ['bug bug bug bug', 'bug bug', 'bug', '#']
试试这个:

arr = ['bug', 'bug bug', '#', 'bug bug bug bug']
w = 'bug'
out = sorted(arr, key=lambda item: -item.split().count(w))
print(out)  # -> ['bug bug bug bug', 'bug bug', 'bug', '#']

当前答案仅在arr中有相同单词时有效。以下代码适用于arr中的任何项目:


当前答案仅在arr中有相同单词时有效。以下代码适用于arr中的任何项目:


请共享您先尝试过的代码。请共享您先尝试过的代码。arr=['q q q','q a b c d e','q q','a']不起作用。如果我理解的问题是正确的,@JonasPalačionis我编辑它来处理w参数。很好的捕获。将列表排序并返回通常是不好的做法。做一个或另一个-可能更好地返回它,以保持函数的纯净。同样,您可以使用lambda而不是def,并且不需要为str.split提供参数。所以:def s_sortarr,w:return sortedar,key=lambda e:e.split.countw,reverse=TrueIt不适用于arr=['q q q','q a b c d e','q q','a']。如果我理解的问题是正确的,@JonasPalačionis我编辑它来处理w参数。很好的捕获。将列表排序并返回通常是不好的做法。做一个或另一个-可能更好地返回它,以保持函数的纯净。同样,您可以使用lambda而不是def,并且不需要为str.split提供参数。因此:def s_sortarr,w:return sortedar,key=lambda e:e.split.countw,reverse=truel我用另外两个答案尝试了你的例子,这两个答案都是在你之前发布/最后编辑过的,它们得到了正确的结果。你可以使用排序键来简化这一过程:def fnarr,w:return sortedar,reverse=True,key=lambda x:x.countwI用另外两个答案尝试了你的例子,这两个答案都是在你之前发布/最后编辑的,它们得到了正确的结果。你可以使用排序键来大量简化这一过程:def fnarr,w:return sortedar,reverse=True,key=lambda x:x.countwi如果我有一个包含“win-win”和“in-in”元素的列表,并且给定的单词是“in”,那么您的代码不会将其排序为['win-win','in'],而不是['in-in','win-win']?我认为最好这样做:key=lambda item:-item.split。countw@Siddhesh他们修复了它如果我有一个包含“win-win”和“in-in”元素的列表,并且给定的单词是“in”,那么您的代码不会将其排序为['win-win'、'in-in']而不是['in'、'win-win']?我认为最好这样做:key=lambda item:-item.split。countw@Siddhesh他们修好了
def fn(arr,w):
    ord_lst = []
    for x in arr:
        ord_lst.append(x.count(w))
    return [x for _,x in sorted(zip(ord_lst,arr),reverse=True)]

arr = ['bug', 'bug bug', '# c c c c c c c', 'bug bug bug bug']
w = 'bug'
fn(arr,w)
# ['bug bug bug bug', 'bug bug', 'bug', '# c c c c c c c']