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

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

如何使用itertools.groupby()?

如何使用itertools.groupby()?

人到中年有點甜 2021-03-22 09:11:39
我還沒有找到關(guān)于如何實際使用Pythonitertools.groupby()函數(shù)的可理解的解釋。我想做的是這樣的:列出一個列表-在這種情況下,是一個對象化lxml元素的子元素根據(jù)一些標準將其分為幾組然后,稍后分別遍歷這些組中的每一個。我已經(jīng)閱讀了文檔,但是嘗試將其應用于簡單的數(shù)字列表之外時遇到了麻煩。那么,我該如何使用itertools.groupby()?我應該使用另一種技術(shù)嗎?指向良好的“先決條件”閱讀器的指針也將不勝感激。
查看完整描述

4 回答

?
暮色呼如

TA貢獻1853條經(jīng)驗 獲得超9個贊

重要說明:您必須先對數(shù)據(jù)進行排序。


我沒有得到的部分是在示例構(gòu)造中

groups = []uniquekeys = []for k, g in groupby(data, keyfunc):
   groups.append(list(g))    # Store group iterator as a list
   uniquekeys.append(k)

k是當前的分組密鑰,并且g是一個迭代器,您可以使用該迭代器在該分組密鑰定義的組上進行迭代。換句話說,groupby迭代器本身返回迭代器。

這是一個使用更清晰的變量名的示例:

from itertools import groupbythings = [("animal", "bear"), ("animal", "duck"), ("plant", "cactus"), ("vehicle", "speed boat"), ("vehicle", "school bus")]for key, group in groupby(things, lambda x: x[0]):    for thing in group:
        print("A %s is a %s." % (thing[1], key))
    print("")

這將為您提供輸出:

熊是動物。
鴨子是動物。

仙人掌是植物。

快艇是車輛。
校車是車輛。

在此示例中,things是一個元組列表,其中每個元組中的第一項是第二項所屬的組。

groupby()函數(shù)有兩個參數(shù):(1)要分組的數(shù)據(jù)和(2)將數(shù)據(jù)分組的函數(shù)。

在這里,lambda x: x[0]告訴groupby()使用每個元組中的第一項作為分組鍵。

在上面的for語句中,groupby返回三個(鍵,組迭代器)對-每個唯一鍵一次。您可以使用返回的迭代器來迭代該組中的每個單個項目。

這是一個使用列表推導的具有相同數(shù)據(jù)的稍有不同的示例:

for key, group in groupby(things, lambda x: x[0]):
    listOfThings = " and ".join([thing[1] for thing in group])
    print(key + "s:  " + listOfThings + ".")

這將為您提供輸出:

動物:熊和鴨。
植物:仙人掌。
車輛:快艇和校車。


查看完整回答
反對 回復 2021-03-22
?
UYOU

TA貢獻1878條經(jīng)驗 獲得超4個贊

itertools.groupby 是用于分組項目的工具。

文檔中,我們進一步了解了它可能會做什么:

# [k for k, g in groupby('AAAABBBCCDAABBB')] --> A B C D A B

# [list(g) for k, g in groupby('AAAABBBCCD')] --> AAAA BBB CC D

groupby 對象產(chǎn)生密鑰組對,其中組是生成器。

特征

  • A.將連續(xù)的項目組合在一起

  • B.歸因于可迭代項,將所有出現(xiàn)的項歸為一組

  • C.指定如何使用按鍵功能 對項目進行分組*

比較表

# Define a printer for comparing outputs>>> def print_groupby(iterable, keyfunc=None):...    for k, g in it.groupby(iterable, keyfunc):...        print("key: '{}'--> group: {}".format(k, list(g)))
# Feature A: group consecutive occurrences>>> print_groupby("BCAACACAADBBB")key: 'B'--> group: ['B']key: 'C'--> group: ['C']key: 'A'--> group: ['A', 'A']key: 'C'--> group: ['C']key: 'A'--> group: ['A']key: 'C'--> group: ['C']key: 'A'--> group: ['A', 'A']key: 'D'--> group: ['D']key: 'B'--> group: ['B', 'B', 'B']# Feature B: group all occurrences>>> print_groupby(sorted("BCAACACAADBBB"))key: 'A'--> group: ['A', 'A', 'A', 'A', 'A']key: 'B'--> group: ['B', 'B', 'B', 'B']key: 'C'--> group: ['C', 'C', 'C']key: 'D'--> group: ['D']# Feature C: group by a key function>>> # islower = lambda s: s.islower()                      # equivalent>>> def islower(s):...     """Return True if a string is lowercase, else False."""   ...     return s.islower()>>> print_groupby(sorted("bCAaCacAADBbB"), keyfunc=islower)key: 'False'--> group: ['A', 'A', 'A', 'B', 'B', 'C', 'C', 'D']key: 'True'--> group: ['a', 'a', 'b', 'b', 'c']


查看完整回答
反對 回復 2021-03-22
?
有只小跳蛙

TA貢獻1824條經(jīng)驗 獲得超8個贊

Python文檔上的示例非常簡單:

groups = []uniquekeys = []for k, g in groupby(data, keyfunc):
    groups.append(list(g))      # Store group iterator as a list
    uniquekeys.append(k)

因此,在您的情況下,數(shù)據(jù)是節(jié)點的列表,keyfunc條件函數(shù)的邏輯將在該列表中進行groupby()分組,然后對數(shù)據(jù)進行分組。

在致電之前,您必須小心按照條件對數(shù)據(jù)進行排序,groupby否則它將無法正常工作。groupby方法實際上只是遍歷列表,并且只要更改鍵,它就會創(chuàng)建一個新組。


查看完整回答
反對 回復 2021-03-22
?
臨摹微笑

TA貢獻1982條經(jīng)驗 獲得超2個贊

使用groupby的一個妙招是在一行中運行長度編碼:

[(c,len(list(cgen))) for c,cgen in groupby(some_string)]

將為您提供2元組的列表,其中第一個元素是char,第二個是重復數(shù)。

編輯:請注意,這是itertools.groupby與SQLGROUP BY語義不同的東西:itertools不會(通常不能)事先對迭代器進行排序,因此不會合并具有相同“鍵”的組。


查看完整回答
反對 回復 2021-03-22
  • 4 回答
  • 0 關(guān)注
  • 310 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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