簡體   English   中英

在嵌套 for 循環中枚舉外部增量的列表理解

[英]Enumerate in nested for loop with list comprehension for outer increment

我正在嘗試將此問題的公認解決方案應用於以下問題,但愚蠢的是我不能:

在:

increment='increment'
[f'{level_A}_{level_B}_{level_C}_{increment}' 
for level_A, rng in [(5, list(range(1,3))), (6, list(range(1,3)))]
for level_B in rng
for level_C in range(1, 5)]

出去:

['5_1_1_increment',
 '5_1_2_increment',
 '5_1_3_increment',
 '5_1_4_increment',
 '5_2_1_increment',
 '5_2_2_increment',
 '5_2_3_increment',
 '5_2_4_increment',
 '6_1_1_increment',
 '6_1_2_increment',
 '6_1_3_increment',
 '6_1_4_increment',
 '6_2_1_increment',
 '6_2_2_increment',
 '6_2_3_increment',
 '6_2_4_increment']

其中increment值需要為 1,2,3,..15,16。 重要的是,我需要在一行中執行此操作(即在理解之外沒有變量定義)並且理想情況下沒有任何導入(就像在原始問題的接受答案中一樣)

由於您需要在生成組合后對它們進行編號,因此您需要使用嵌套的生成器/理解:

  • 在內部,生成組合;
  • 使用enumerate(..., start=1)從 1 開始對它們進行編號
  • 在外部,將它們格式化為所需的形式。
[
    f"{level_A}_{level_B}_{level_C}_{increment}"
    for increment, (level_A, level_B, level_C) in enumerate(
        (
            (A, B, C)
            for A, rng in [(5, list(range(1, 3))), (6, list(range(1, 3)))]
            for B in rng
            for C in range(1, 5)
        ),
        start=1,
    )
]

使用海象運算符進行增量。

>>> increment=0
>>> [f'{level_A}_{level_B}_{level_C}_{(increment:=increment+1)}' 
... for level_A, rng in [(5, list(range(1,3))), (6, list(range(1,3)))]
... for level_B in rng
... for level_C in range(1, 5)]

這給了我:

['5_1_1_1', '5_1_2_2', '5_1_3_3', '5_1_4_4', '5_2_1_5', '5_2_2_6', '5_2_3_7', '5_2_4_8', '6_1_1_9', '6_1_2_10', '6_1_3_11', '6_1_4_12', '6_2_1_13', '6_2_2_14', '6_2_3_15', '6_2_4_16']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM