我有一个水果列表
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)