python - 在嵌套的 for 循环中枚举内部增量的列表理解
问题描述
跟进这个关于如何enumerate
在列表理解中实现外部增量的问题,我想知道是否有办法调整接受的答案以便这次创建内部增量;我正在寻找生成此输出:
['D_50_1-1_1',
'D_50_2-1_2',
'D_50_3-1_3',
'D_80_1-2_1',
'D_80_2-2_2',
'D_80_3-2_3',
'D_20_1-3_1',
'D_20_2-3_2',
'D_20_3-3_3',
'D_60_1-4_1',
'D_60_2-4_2',
'D_60_3-4_3',
'E_35_1-5_1',
'E_35_2-5_2',
'E_35_3-5_3',
'E_25_1-6_1',
'E_25_2-6_2',
'E_25_3-6_3']
其中内部增量是倒数第二列 ( 1,1,1,2,2,3,3,3 ...6,6,6
)。
目前,我通过list(range(1, 4+1))
根据 的长度对增量(例如 )进行硬编码来实现这一点levelB
,这显然容易出错:
[f'{levelA}_{levelB}_{sub}-{inner_increment}_{sub}'
for levelA, pairs in
[('D', dict(zip([50,80,20,60], list(range(1, 4+1))))),
('E', dict(zip([35, 25], list(range(5, 7+1)))))]
for levelB,inner_increment in pairs.items()
for sub in range(1, 3+1)
]
有没有办法通过引入enumerate
同时保持列表理解方法并且理想情况下没有任何导入来产生相同的输出,类似于另一个问题中接受的答案?
解决方案
我最终设法自己解决了这个问题。发布以确保完整性。
[f'{levelA}_{levelB}_{sub}-{increment}_{sub}'
for increment, (levelA, levelB) in enumerate(
(
(levelA,levelB)
for levelA,lists in
[('D', [50,80,20,60]),
('E', [35, 25])]
for levelB in lists
), start=1,
)
for sub in range(1,3+1)
]
Out[67]:
['D_50_1-1_1',
'D_50_2-1_2',
'D_50_3-1_3',
'D_80_1-2_1',
'D_80_2-2_2',
'D_80_3-2_3',
'D_20_1-3_1',
'D_20_2-3_2',
'D_20_3-3_3',
'D_60_1-4_1',
'D_60_2-4_2',
'D_60_3-4_3',
'E_35_1-5_1',
'E_35_2-5_2',
'E_35_3-5_3',
'E_25_1-6_1',
'E_25_2-6_2',
'E_25_3-6_3']
推荐阅读
- ruby-on-rails - 使用 HTTParty 发送多个文件
- mongodb - 单击检查按钮时如何更改vue的状态
- python - 在 python 中处理时间序列数据:对一个时间段的序列求和和聚合
- visual-studio-code - 我在哪里可以看到我拥有的 VSC 版本?
- excel - 对匹配函数的结果进行分组
- sql-server - 需要有关如何进行正确选择和更新查询的建议我不确定我哪里出错了
- c# - 按键时如何消除延迟?
- laravel - 如何使用 Laravel-Lumen 框架检查 azure 令牌(身份验证)
- node.js - 自动解析后的承诺链接
- bazel - 为 pkg_deb 的“package”和“architecture”属性选择不同的值