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

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

如何讓內(nèi)循環(huán)在外循環(huán)完成后最后一次觸發(fā)

如何讓內(nèi)循環(huán)在外循環(huán)完成后最后一次觸發(fā)

肥皂起泡泡 2023-08-08 15:05:14
我有兩個(gè)清單:第一個(gè)列表包含頂級(jí)名稱(chēng)信息;每個(gè)項(xiàng)目有多個(gè)描述符第二個(gè)列表包含第一個(gè)列表中項(xiàng)目的變體;每個(gè)項(xiàng)目還有多個(gè)描述符外部(第一個(gè))列表包含三項(xiàng);name1、name2、 和name3。還有一個(gè)source,但我沒(méi)有費(fèi)心在示例中更改它以保持簡(jiǎn)單。內(nèi)部(第二個(gè))列表包含外部列表的名稱(chēng)和來(lái)源,然后有自己的名稱(chēng)和來(lái)源。最終結(jié)果應(yīng)該是這樣的:name1 (source1)===============* [name1-foo1]: . "description1"* [name1-foo2]: . "description2"* [name1-foo3]: . "description3"subname1 (subsource1)---------------* [name1-sub1-bar1]: . "description1"* [name1-sub1-bar2]: . "description2"* [name1-sub1-bar3]: . "description3"subname2 (subsource1)---------------* [name1-sub2-bar1]: . "description1"* [name1-sub2-bar2]: . "description2"* [name1-sub2-bar3]: . "description3"...我的問(wèn)題是我的外循環(huán)查找name和中的更改source作為打印標(biāo)題并繼續(xù)打印下一個(gè)內(nèi)容的觸發(fā)器。但由于內(nèi)循環(huán)僅由更改觸發(fā),因此當(dāng)外循環(huán)運(yùn)行完時(shí),它不會(huì)最后一次運(yùn)行內(nèi)循環(huán)來(lái)獲取所有子項(xiàng)。import collectionsOuterRecord = collections.namedtuple('OuterRecord',                                     'name, source, thing, level, description')InnerRecord = collections.namedtuple('InnerRecord',                                     'name, source, in_name, in_source, thing, level, description')o = [    OuterRecord('name1', 'source1', 'name1-foo1', 1, 'description1'),    OuterRecord('name1', 'source1', 'name1-foo2', 5, 'description2'),    OuterRecord('name1', 'source1', 'name1-foo3', 10, 'description3'),    OuterRecord('name2', 'source1', 'name2-foo1', 1, 'description1'),    OuterRecord('name2', 'source1', 'name2-foo2', 5, 'description2'),    OuterRecord('name2', 'source1', 'name2-foo3', 10, 'description3'),    OuterRecord('name3', 'source1', 'name3-foo1', 1, 'description1'),    OuterRecord('name3', 'source1', 'name3-foo2', 5, 'description2')]]因此,一旦一切完成,我可以再次單獨(dú)運(yùn)行內(nèi)部循環(huán),但這聞起來(lái)很糟糕。有沒(méi)有更好的方法來(lái)構(gòu)建循環(huán),以便這一切一次性發(fā)生?
查看完整描述

2 回答

?
jeck貓

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

您的代碼的一個(gè)有趣的事實(shí)是,它看起來(lái)具有檢測(cè)更改背后的價(jià)值。不幸的是,最后一個(gè)值沒(méi)有機(jī)會(huì)被檢測(cè)到,因?yàn)檠h(huán)在那里結(jié)束。


相反,使用兩個(gè)指針,一個(gè)用于當(dāng)前值,一個(gè)用于列表中的下一個(gè)值。使用這樣的條件來(lái)檢測(cè)下一個(gè)的變化(lookahead)


for index, outer in enumerate(outer_list):

    next_outer_source = outer_list[index + 1] if index < len(outer_list) - 1 else None


    show_outer_header = current_outer_name != outer.name or current_outer_source != outer.source

    show_inner_values = next_outer_source is None or outer.name != next_outer_source.name or outer.source != next_outer_source.source 

這是您的函數(shù)的清理副本:



def loop_over(outer_list, inner_list):

    current_outer_name = None

    current_outer_source = None

    current_inner_name = None

    current_inner_source = None

    prev_outer_source = None


    for index, outer in enumerate(outer_list):

        next_outer_source = outer_list[index + 1] if index < len(outer_list) - 1 else None

        

        show_outer_header = current_outer_name != outer.name or current_outer_source != outer.source

        show_inner_values = next_outer_source is None or outer.name != next_outer_source.name or outer.source != next_outer_source.source

        

        # print outer header

        if show_outer_header:

            print('\n{} ({})'.format(outer.name, outer.source))

            print('=' * 15)

            current_outer_name, current_outer_source = outer.name, outer.source


        # print outer value

        print('* [{}]: . "{}"'.format(outer.thing, outer.description))


        # print inner values

        if show_inner_values:

            current_outer_name = outer.name

            current_outer_source = outer.source


            for inner in [x for x in inner_list if x.name == current_outer_name and x.source == current_outer_source]:

                if current_inner_name is None:

                    print('\n{} ({})'.format(inner.in_name, inner.in_source))

                    print('-' * 15)

                    current_inner_name = inner.in_name

                    current_inner_source = inner.in_source


                if inner.in_name != current_inner_name or inner.in_source != current_inner_source:

                    print('\n{} ({})'.format(inner.in_name, inner.in_source))

                    print('-' * 15)

                    current_inner_name = inner.in_name

                    current_inner_source = inner.in_source


                print('* [{}]: . "{}"'.format(inner.thing, inner.description))


輸出:


name1 (source1)

===============

* [name1-foo1]: . "description1"

* [name1-foo2]: . "description2"

* [name1-foo3]: . "description3"


subname1 (subsource1)

---------------

* [name1-sub1-bar1]: . "description1"

* [name1-sub1-bar2]: . "description2"

* [name1-sub1-bar3]: . "description3"


subname2 (subsource1)

---------------

* [name1-sub2-bar1]: . "description1"

* [name1-sub2-bar2]: . "description2"

* [name1-sub2-bar3]: . "description3"


name2 (source1)

===============

* [name2-foo1]: . "description1"

* [name2-foo2]: . "description2"

* [name2-foo3]: . "description3"


subname3 (subsource1)

---------------

* [name2-sub3-bar1]: . "description1"

* [name2-sub3-bar2]: . "description2"

* [name2-sub3-bar2]: . "description3"


name3 (source1)

===============

* [name3-foo1]: . "description1"

* [name3-foo2]: . "description2"


subname4 (subsource1)

---------------

* [name3-sub4-bar1]: . "description1"

* [name3-sub4-bar2]: . "description2"

* [name3-sub4-bar2]: . "description3"


subname5 (subsource1)

---------------

* [name3-sub5-bar1]: . "description1"

* [name3-sub5-bar2]: . "description2"

* [name3-sub5-bar3]: . "description3"


subname6 (subsource1)

---------------

* [name3-sub6-bar1]: . "description1"

* [name3-sub6-bar2]: . "description2"

* [name3-sub6-bar3]: . "description3"


查看完整回答
反對(duì) 回復(fù) 2023-08-08
?
慕標(biāo)琳琳

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

考慮到詳細(xì)的數(shù)據(jù)結(jié)構(gòu),我預(yù)計(jì)效率并不是您真正追求的,因此這似乎是一種相當(dāng)簡(jiǎn)潔且可讀的方式來(lái)獲取您所需要的內(nèi)容:


def print_outer_and_inner(outer_recs, inner_recs):

    for name, source in {(o_rec.name, o_rec.source): None for o_rec in outer_recs}:

        print(f'{name} ({source})')

        print('=' * 15)

        for o_rec in outer_recs:

            if o_rec.name == name:

                print(f'* [{o_rec.thing}]: . "{o_rec.description}"')

        print()

        for sub_name, sub_source in {(i_rec.in_name, i_rec.in_source): None for i_rec in inner_recs}:

            print(f'{sub_name} ({sub_source})')

            print('-' * 15)

            for i_rec in inner_recs:

                if i_rec.in_name == sub_name:

                    print(f'* [{i_rec.thing}]: . "{i_rec.description}"')

            print()



print_outer_and_inner(o, i)

主要缺點(diǎn)是它會(huì)在每個(gè)列表上循環(huán)多次,但它給你帶來(lái)的是簡(jiǎn)潔性和可讀性。


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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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