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

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

帶有itertools的格雷碼順序的笛卡爾積?

帶有itertools的格雷碼順序的笛卡爾積?

GCT1015 2022-10-05 18:25:16
是否有類似 Python 的東西通過格雷碼順序itertools.product()的一組集合的笛卡爾積提供迭代?例如,假設存在這樣一個假設的生成器,并且它被稱為,那么將按照以下順序生成:gray_code_product()gray_code_product(['a','b','c'], [0,1], ['x','y'])('a',0,'x')('a',0,'y')('a',1,'y')('a',1,'x')('b',1,'x')('b',1,'y')('b',0,'y')('b',0,'x')('c',0,'x')('c',0,'y')('c',1,'y')('c',1,'x')
查看完整描述

1 回答

?
30秒到達戰(zhàn)場

TA貢獻1828條經驗 獲得超6個贊

根據 的文檔,itertools.product該函數等價于以下 Python 代碼:

def product(*args, repeat=1):

    pools = [tuple(pool) for pool in args] * repeat

    result = [[]]

    for pool in pools:

        result = [x+[y] for x in result for y in pool]

    for prod in result:

        yield tuple(prod)

由于格雷碼產品是關于反轉每個池的前一個序列的順序,因此您可以在迭代它時使用enumerate上一個result列表來確定索引是奇數還是偶數,如果它是則反轉池的序列奇數:


def gray_code_product(*args, repeat=1):

    pools = [tuple(pool) for pool in args] * repeat

    result = [[]]

    for pool in pools:

        result = [x+[y] for i, x in enumerate(result) for y in (

            reversed(pool) if i % 2 else pool)]

    for prod in result:

        yield tuple(prod)

以便:


for p in gray_code_product(['a','b','c'], [0,1], ['x','y']):

    print(p)

輸出:


('a', 0, 'x')

('a', 0, 'y')

('a', 1, 'y')

('a', 1, 'x')

('b', 1, 'x')

('b', 1, 'y')

('b', 0, 'y')

('b', 0, 'x')

('c', 0, 'x')

('c', 0, 'y')

('c', 1, 'y')

('c', 1, 'x')


查看完整回答
反對 回復 2022-10-05
  • 1 回答
  • 0 關注
  • 99 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號