如何生成含连续数字与预定义集合元素的指定嵌套列表?
解决你的嵌套列表生成问题
我明白你想要生成按数字分组、交替出现'A'和'B'的嵌套列表,比如[['A', 1], ['B', 1], ['A', 2], ['B', 2], ...]。咱们来看看你之前尝试的两种写法问题出在哪,再给出正确的方案:
你的两种尝试的问题分析
第一种写法:
[['A', x],['B', x] for x in range(1,100)]
这个写法在语法上就通不过——列表推导式的每一项只能是单个元素,你这里一次放了两个子列表,Python会把它们当成一个元组处理,要么结构不符合预期,要么直接报错。第二种写法:
[[key, x] for key in ['A', 'B'] for x in range(1,100)]
这里的循环顺序搞反了!它会先遍历'A',把所有数字1到99都和'A'配对,再遍历'B'配对所有数字,最终得到的是[['A',1], ['A',2], ..., ['B',1], ['B',2], ...],和你想要的按数字分组的顺序完全不符。
正确的列表推导式写法
你只需要调整循环的顺序,先遍历数字x,再遍历'A'和'B',这样每个x对应的两个子列表就会连续出现:
[[key, x] for x in range(1, 100) for key in ['A', 'B']]
运行这段代码,就能得到你想要的[['A',1], ['B',1], ['A',2], ['B',2], ..., ['A',99], ['B',99]]结构。
另一种等价写法(更直观)
如果你觉得嵌套循环的推导式有点绕,也可以用普通循环+extend的方式实现,逻辑更清晰:
result = [] for x in range(1, 100): # 每次循环把当前x对应的两个子列表加入结果 result.extend([['A', x], ['B', x]])
或者用列表推导式的扁平化写法,效果和上面完全一致:
[item for x in range(1, 100) for item in [['A', x], ['B', x]]]
内容的提问来源于stack exchange,提问作者d.raev
相关产品推荐
相关产品推荐

