第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

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

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

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

3 回答

?
慕斯709654

TA貢獻1840條經(jīng)驗 獲得超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]


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

TA貢獻1872條經(jīng)驗 獲得超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]]

正如我發(fā)布的那樣,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))

結(jié)果:


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

這是現(xiàn)場測試


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

TA貢獻1773條經(jīng)驗 獲得超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]]


查看完整回答
反對 回復(fù) 2021-08-24
  • 3 回答
  • 0 關(guān)注
  • 261 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號