もっとシンプルに書けるかもしれませんが、importなしで。
- ソート済みの共通項(set)を作る
- 1をイテレートして、その要素と同じものをa, bから取り出す(aa, bbとする)
- aaとbbの要素の少ない方を採用する
lang
1def f(a, b):
2 result = []
3 for i in sorted(set(a + b)):
4 aa = [x for x in a if x == i]
5 bb = [x for x in b if x == i]
6 result += aa if len(aa) < len(bb) else bb
7 return result
8
9a=["a","b","b","c"]
10b=["b","b","c","d"]
11print(f(a, b))
12# ['b', 'b', 'c']
13
14a=["a","a","a","a","b","b","c","d"]
15b=["a","a","a","b","c","c"]
16print(f(a, b))
17# ['a', 'a', 'a', 'b', 'c']
上のを全部、内包表記に押し込めたバージョン。
lang
1def f(a, b):
2 return [item for nested in
3 [min([x for x in a if x == i],
4 [x for x in b if x == i], key=len)
5 for i in sorted(set(a + b))] for item in nested]