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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

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

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

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

3 回答

?
慕斯709654

TA貢獻(xiàn)1840條經(jīng)驗(yàn) 獲得超5個(gè)贊

試試這個(gè)


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]


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

TA貢獻(xiàn)1872條經(jīng)驗(yàn) 獲得超4個(gè)贊

最好的方法是一個(gè)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)比其他方法更快。以下是測(cè)試:


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)場(chǎng)測(cè)試


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

TA貢獻(xiàn)1773條經(jīng)驗(yàn) 獲得超3個(gè)贊

這是使用的一種簡(jiǎn)短方法 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]]


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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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