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

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

如何在Python 3中使用生成器管道?

如何在Python 3中使用生成器管道?

慕后森 2023-10-11 21:39:29
我正在努力提高我的能力并學(xué)習(xí)發(fā)電機(jī)管道。我設(shè)法解決了一些問題,但我覺得我的理解存在基本差距。例如:我嘗試構(gòu)建一個(gè)返回某個(gè)范圍內(nèi)的所有數(shù)字的函數(shù)。范圍以幾個(gè)范圍的字符串形式給出。收到的字符串的示例:"1-2,4-4,8-10"。因此,第一個(gè)生成器應(yīng)該返回一個(gè) int 對的列表:[1, 2] [4, 4] [8, 10] 第二個(gè)生成器應(yīng)該使用范圍函數(shù)中的1st_gen[0]作為開始和停止,并返回范圍內(nèi)的所有數(shù)字:1st_gen[1]1 2 4 8 9 10這是我的代碼,我很樂意提供提高我的技能的提示:def parse_ranges(range_string):    temp_list = (c.replace("-", ",") for c in list(range_string.split(",")))    generator2 = (i for start, stop in temp_list for i in range(int(start), int(stop) + 1))    for i in generator2:        print(i)print(parse_ranges("1-2,4-4,8-10"))print(parse_ranges("0-0,4-8,20-21,43-45"))
查看完整描述

2 回答

?
慕婉清6462132

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

一些修復(fù):

  • str.split()返回一個(gè)列表,無需將其結(jié)果放入list

  • parse_ranges()不返回任何內(nèi)容,為什么要打印它?

  • range(int(4), int(4) + 1)不會回來,[4, 4]但只會[4]

def parse_ranges(range_string):

    temp = (map(int, c.split("-")) for c in range_string.split(",")) 


    # yield all the numbers (yield from 'flattens' the result)

    for start, stop in temp:

        yield from range(start, stop + 1)


    # or to yield lists 

    # for start, stop in temp:

    #     yield list(range(start, stop + 1))


print(*parse_ranges("1-2,4-4,8-10"), sep=" ~ ")

print(*parse_ranges("0-0,4-8,20-21,43-45"), sep=" ~ ")

輸出('~'作為分隔符添加,因此很清楚,產(chǎn)生的元素的“邊界”在哪里):


# yield from range(start, stop + 1)

1 ~ 2 ~ 4 ~ 8 ~ 9 ~ 10

0 ~ 4 ~ 5 ~ 6 ~ 7 ~ 8 ~ 20 ~ 21 ~ 43 ~ 44 ~ 45


# yield list(range(start, stop + 1))

[1, 2] ~ [4] ~ [8, 9, 10]

[0] ~ [4, 5, 6, 7, 8] ~ [20, 21] ~ [43, 44, 45]


查看完整回答
反對 回復(fù) 2023-10-11
?
慕少森

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

如果需要,您可以將流程拆分為任意多個(gè)生成器步驟,例如:


def get_ranges(string):

    for part in string.split(","):

        yield [int(number) for number in part.split("-")]


def get_numbers(ranges):

    for start, stop in ranges:

        yield from range(start, stop + 1)

用法:


>>> list(get_numbers(get_ranges("1-2,4-4,8-10")))

[1, 2, 4, 8, 9, 10]

如果您確實(shí)愿意,您甚至可以將其拆分為更多步驟(拆分為多個(gè)部分,轉(zhuǎn)換為數(shù)字,轉(zhuǎn)換為范圍對象,獲取數(shù)字)。


查看完整回答
反對 回復(fù) 2023-10-11
  • 2 回答
  • 0 關(guān)注
  • 140 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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