亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將列表中的相同值分組到它們自己的列表中?

如何將列表中的相同值分組到它們自己的列表中?

森林海 2021-08-24 19:11:38
說我有一個清單 [2, 3, 7, 2, 3, 8, 7, 3]我想從上面的列表中生成包含相同值的列表。預期輸出類似于:[2, 2][3, 3, 3][7, 7][8]這些列表的生成順序無關緊要。
查看完整描述

3 回答

?
慕斯709654

TA貢獻1840條經驗 獲得超5個贊

試試這個


l = [2, 3, 7, 2, 3, 8, 7, 3]

for i in set(l):

   print([i]*l.count(i))

輸出:


[8]

[2, 2]

[3, 3, 3]

[7, 7]


查看完整回答
反對 回復 2021-08-24
?
守著一只汪

TA貢獻1872條經驗 獲得超4個贊

最好的方法是一個O(n)解決方案collections.defaultdict:


>>> l = [2, 3, 7, 2, 3, 8, 7, 3]

>>> d = defaultdict(list)

>>> for e in l:

...     d[e].append(e)

... 

>>> d

defaultdict(<class 'list'>, {2: [2, 2], 3: [3, 3, 3], 7: [7, 7], 8: [8]})

>>> d.values()

dict_values([[2, 2], [3, 3, 3], [7, 7], [8]])

或者,您可以使用itertools.groupby排序列表:


>>> for _, l in itertools.groupby(sorted(l)):

...     print(list(l))

... 

[2, 2]

[3, 3, 3]

[7, 7]

[8]

或列表理解collections.Counter:


>>> from collections import Counter

>>> [[i]*n for i,n in Counter(l).items()]

[[2, 2], [3, 3, 3], [7, 7], [8]]

正如我發布的那樣,defaultdict 解決方案O(n)比其他方法更快。以下是測試:


from timeit import timeit



setup = (

"from collections import Counter, defaultdict;"

"from itertools import groupby;"

"l = [2, 3, 7, 2, 3, 8, 7, 3];"

)


defaultdict_call = (

"d = defaultdict(list); "

"\nfor e in l: d[e].append(e);"

)

groupby_call = "[list(g) for _,g in groupby(sorted(l))]"

counter_call = "[[i]*n for i,n in Counter(l).items()]"



for call in (defaultdict_call, groupby_call, counter_call):

  print(call)

  print(timeit(call, setup))

結果:


d = defaultdict(list); 

for e in l: d[e].append(e);

7.02662614302244

[list(g) for _,g in groupby(sorted(l))]

10.126392606005538

[[i]*n for i,n in Counter(l).items()]

19.55539561196929

這是現場測試


查看完整回答
反對 回復 2021-08-24
?
慕容3067478

TA貢獻1773條經驗 獲得超3個贊

這是使用的一種簡短方法 Counter


from collections import Counter

my_dict = Counter([2, 3, 7, 2, 3, 8, 7, 3]) # returns {3: 3, 2: 2, 7: 2, 8: 1}


new_list = [[k] * v for k,v in my_dict.items()] 

輸出:


[[2, 2], [3, 3, 3], [7, 7], [8]]


查看完整回答
反對 回復 2021-08-24
  • 3 回答
  • 0 關注
  • 252 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號