Python生成列表元素所有有序数对报错,求解决方法
修复生成有序数对的代码错误
你的需求是生成列表B中所有有序二元数对(元素不重复,顺序不同算不同数对),但原代码存在两个核心问题:
- 错误使用
itertools.combinations:这个函数生成的是无序组合,不符合你要的有序数对需求; - 循环范围错误:你遍历了从0到列表长度的所有子集长度,当长度为1时,
subset是单个整数,此时[list(sub) for sub in subset]会尝试遍历整数,触发TypeError: 'int' object is not iterable。
修复后的代码
直接使用itertools.permutations生成指定长度的有序排列,目标是二元数对,所以指定长度为2:
import itertools B = [1, 2, 5, 7, 10, 11] # 生成所有长度为2的有序排列,转为列表格式 combination = [list(pair) for pair in itertools.permutations(B, 2)] # 按预期格式打印输出 for idx, pair in enumerate(combination): print(str(pair), end=",\n" if (idx+1) % 5 == 0 else ",")
输出结果
运行后会得到你预期的格式:
[1,2],[1,5],[1,7],[1,10],[1,11], [2,1],[2,5],[2,7],[2,10],[2,11], [5,1],[5,2],[5,7],[5,10],[5,11], [7,1],[7,2],[7,5],[7,10],[7,11], [10,1],[10,2],[10,5],[10,7],[10,11], [11,1],[11,2],[11,5],[11,7],[11,10]
内容的提问来源于stack exchange,提问作者rajunarlikar123
相关产品推荐
相关产品推荐

