【问题标题】:Enumerate in nested for loop with list comprehension for outer increment在嵌套 for 循环中枚举外部增量的列表理解
【发布时间】:2021-04-15 08:57:04
【问题描述】:

我正在尝试将this 问题的公认解决方案应用于以下问题,但愚蠢的是我不能:

在:

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。重要的是,我需要在一行中执行此操作(即在理解之外没有变量定义)并且理想情况下没有任何导入(就像在原始问题的接受答案中一样)

【问题讨论】:

    标签: python


    【解决方案1】:

    使用walrus operator 进行增量。

    >>> 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']
    

    【讨论】:

      【解决方案2】:

      由于您需要在生成组合后对其进行编号,因此您需要使用嵌套生成器/理解:

      • 在内部,生成组合;
      • 从 1 开始编号,使用 enumerate(..., start=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,
          )
      ]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-02-13
        • 1970-01-01
        • 1970-01-01
        • 2011-04-07
        • 2022-01-05
        • 2018-12-25
        • 2019-08-30
        • 2017-09-01
        相关资源
        最近更新 更多