在python中将一个列表排列到list的list中



我有一个水果列表

alist=["orange","mango","orange","orange","banana","mango"]

我想把不同种类的水果分组到不同的列表中

blist=[["orange","orange","orange"],["mango","mango"],["banana"]]

我目前的解决方案太大了。我创建了3个空列表,并用for循环填充每个列表。即:

>>>oranges=[]
>>>mangos=[]
>>> bananas=[]
>>> for fruit in alist:
If fruit=="orange":
oranges.append(fruit)
elif fruit=="mango":
mangos.append(fruit)
elif fruit=="banana"
bananas.append(fruit)
blist=[oranges,mangos,bananas]

一定有一种更简单、更干净的方法来做这件事,对吗?

一个可能的解决方案是使用collections.Counter:

from collections import Counter
blist = [[k] * v for k, v in Counter(alist).items()]
print(blist)

打印:

[['orange', 'orange', 'orange'], ['mango', 'mango'], ['banana']]

或:

blist = {}
for v in alist:
blist.setdefault(v, []).append(v)
blist = list(blist.values())
print(blist)

最新更新