激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python代碼實現列表分組計數

Python代碼實現列表分組計數

2022-02-28 00:13Felix Python

這篇文章主要介紹了Python代碼實現列表分組計數,利用Python代碼實現了使用分組函數對列表進行分組,并計算每組的元素個數的功能,需要的朋友可以參考一下

Python代碼實現列表分組計數

本篇閱讀的代碼片段來自于30-seconds-of-python。

1. count_by

?
1
2
3
4
5
6
7
8
9
10
def count_by(arr, fn=lambda x: x):
  key = {}
  for el in map(fn, arr):
    key[el] = 1 if el not in key else key[el] + 1
  return key
 
# EXAMPLES
from math import floor
count_by([6.1, 4.2, 6.3], floor) # {6: 2, 4: 1}
count_by(['one', 'two', 'three'], len) # {3: 2, 5: 1}

count_by根據給定的函數對列表中的元素進行分組,并返回每組中元素的數量。該使用map()使用給定函數映射給定列表的值。在映射上迭代,并在每次出現時增加元素數。

該函數使用not in判斷目前字典中是否含有指定的key,如果不含有,就將該key加入字典,并將對應的value設置為1;如果含有,就將value加1。

2. 使用字典推導式

字典推導式有{ key_expr: value_expr for value in collection if condition }這樣的形式。group_by函數中字典推導式的value_expr是一個列表,該列表使用了列表推導式來生成。即

?
1
{ key_expr: [x for x in collection2 if condition2] for value in collection1 if condition1 }

同時,我們可以看到根據group_by代碼中的字典推導式,可能計算出key相同的項,根據Pyrhon中字典的類型的規則,key相同的,只保留最新的key-value對。實際上當key相同時,value值也一樣。[el for el in lst if fn(el) == key]推導式的for語句中只有key一個變量。

?
1
2
3
4
5
6
7
>>> d = {'one': 1, 'two': 2, 'three': 3, 'two': 2}
>>> d
{'one': 1, 'two': 2, 'three': 3}
>>> d = {'one': 1, 'two': 2, 'three': 3, 'two': 22}
>>> d
{'one': 1, 'two': 22, 'three': 3}
>>>

這里也可以使用同樣的方式,在分組之后直接獲取列表長度。不過這種寫法遍歷了兩次列表,會使程序效率變低。

?
1
2
def count_by(lst, fn):
  return {key : len([el for el in lst if fn(el) == key]) for key in map(fn, lst)}

3. 使用collections.defaultdict簡化代碼

?
1
class collections.defaultdict([default_factory[, ...]])

collections.defaultdict包含一個default_factory屬性,可以用來快速構造指定樣式的字典。

當使用int作為default_factory,可以使defaultdict用于計數。因此可以直接使用它來簡化代碼。相比字典推導式的方法,只需要對列表進行一次循環即可。

?
1
2
3
4
5
6
7
from collections import defaultdict
 
def count_by(lst, fn):
  d = defaultdict(int)
  for el in lst:
    d[fn(el)] += 1
  return d

當使用 list 作為 default_factory時,很輕松地將(鍵-值對組成的)序列轉換為(鍵-列表組成的)字典。

?
1
2
3
4
5
6
7
8
9
10
def group_by(lst, fn):
  d = defaultdict(list)
  for el in lst:
    d[fn(el)].append(el)
  return d
 
# EXAMPLES
from math import floor
group_by([6.1, 4.2, 6.3], floor) # {4: [4.2], 6: [6.1, 6.3]}
group_by(['one', 'two', 'three'], len) # {3: ['one', 'two'], 5: ['three']}

到此這篇關于Python代碼實現列表分組計數的文章就介紹到這了,更多相關Python列表分組計數內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://segmentfault.com/a/1190000040668316

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: sm高h视频| 免费性爱视频 | 3344永久免费 | 成人福利电影在线观看 | 精品国产一区二区三区四区在线 | 欧美成人免费在线视频 | 久久伊 | 午夜天堂在线 | 鸳鸯谱在线观看高清 | 国产羞羞视频在线观看免费应用 | 成人三级电影在线 | 欧美日性 | 亚洲乱码精品久久久久 | 国产wwww| 特级黄色影院 | 国产亚洲综合一区二区 | 精国产品一区二区三区四季综 | 奶子吧naiziba.cc免费午夜片在线观看 | 国产亚洲精品精 | 国产精品美女久久久久久不卡 | 精品中文字幕在线播放 | 久色视频网站 | 永久免费黄色大片 | 精品国产专区 | 色女孩网| 91久久国产综合精品女同国语 | 日韩在线观看中文 | 久久艹逼| 精品国产91久久久久久浪潮蜜月 | a黄在线观看 | 国产免费视频在线 | 日本最新免费二区三区 | 免费观看三级毛片 | 亚洲视频黄 | 成人黄色小视频在线观看 | 亚洲精品一区国产精品丝瓜 | 香蕉成人在线观看 | 欧美一级特黄aaaaaa在线看首页 | 全黄毛片 | 黄视频免费在线观看 | 国产pron|