Python如何将扁平化的二元组合列表按每2个元素拆分子列表
问题根因
你之前的循环写法之所以出现拆分单个字符的异常,是因为直接遍历一维的combi_2列表时,每次迭代拿到的是列表里的单个元素(比如'cc'、'th'这类长度为2的字符串)。此时写的for i, j in combi_2相当于对单个长度为2的字符串做解包,把字符串拆成两个独立字符赋值给i和j,最终就会出现输出c c、t h这类不符合预期的结果。
正确实现方法
你现在的需求是基于已有的一维长列表,每2个相邻元素划分为一组,无需重新生成组合,可参考以下两种常用实现:
方法1:按步长遍历索引
直接以2为步长遍历列表索引,每次取当前索引、以及当前索引+1位置的元素组成分组:
combi_2 = ['cc', 'th', 'cc', 'ab', 'cc', 'ca', 'cc', 'cd', 'th', 'ab', 'th', 'ca', 'th', 'cd', 'ab', 'ca', 'ab', 'cd', 'ca', 'cd'] for i in range(0, len(combi_2), 2): # 每两个元素为一组 group = [combi_2[i], combi_2[i+1]] print(group)
运行后输出的内容和你期望的['cc', 'th']、['cc', 'ab']格式完全一致。
方法2:使用zip配对错位切片
将一维列表按偶数索引、奇数索引切分为两个子序列,通过zip自动配对每一组相邻元素:
combi_2 = ['cc', 'th', 'cc', 'ab', 'cc', 'ca', 'cc', 'cd', 'th', 'ab', 'th', 'ca', 'th', 'cd', 'ab', 'ca', 'ab', 'cd', 'ca', 'cd'] # 偶数位元素、奇数位元素自动配对 for pair in zip(combi_2[::2], combi_2[1::2]): # 如需转换为列表格式可手动类型转换 group = list(pair) print(group)
*注意:zip默认生成的是元组类型的配对结果,如果需要得到和预期一致的列表格式,需要手动调用list()转换即可。
内容的提问来源于stack exchange,提问作者DNZ
相关产品推荐
相关产品推荐

