You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现无零无重复三维序列笛卡尔积并导出CSV

解决生成指定CSV文件的问题

需求回顾

需要生成一个CSV文件,满足:

  • 两列均为由±1、±2、±3组成的三元组(无0),同一列内不存在多重集重复的三元组(如[3,1,3]与[3,3,1]视为重复,仅保留一个)
  • 第一列从[3,3,3]遍历到[-3,-3,-3],覆盖所有符合要求的三元组
  • 第一列的每个三元组对应第二列的所有符合要求的三元组,形成笛卡尔积

修正后的Python代码

import csv
from itertools import product

# 定义所有允许的元素(排除0)
elements = [-3, -2, -1, 1, 2, 3]

# 生成所有可能的有序三元组
all_ordered_triples = product(elements, repeat=3)

# 去重:通过排序三元组,将同一多重集的不同有序形式合并为一个唯一代表
unique_multisets = list({tuple(sorted(triple, reverse=True)) for triple in all_ordered_triples})

# 按要求排序:从[3,3,3]到[-3,-3,-3]
sorted_triples = sorted(unique_multisets, key=lambda x: (-x[0], -x[1], -x[2]))

# 生成所有三元组对(笛卡尔积)
all_pairs = product(sorted_triples, sorted_triples)

# 写入CSV文件
with open('triple_pairs.csv', 'w', newline='', encoding='utf-8') as csvfile:
    writer = csv.writer(csvfile)
    # 写入表头
    writer.writerow(['第一列三元组', '第二列三元组'])
    # 遍历所有对,格式化为字符串后写入
    for tri1, tri2 in all_pairs:
        tri1_str = f"[{', '.join(map(str, tri1))}]"
        tri2_str = f"[{', '.join(map(str, tri2))}]"
        writer.writerow([tri1_str, tri2_str])

代码说明

  1. 元素过滤:明确使用[-3,-2,-1,1,2,3],彻底排除0元素,符合需求
  2. 去重逻辑:通过将每个三元组按降序排序后存入集合,自动去除多重集重复的三元组,最终得到56个唯一的多重集三元组
  3. 排序规则:使用(-x[0], -x[1], -x[2])作为排序键,确保三元组从(3,3,3)开始,到(-3,-3,-3)结束,完全匹配遍历顺序要求
  4. 笛卡尔积生成:利用itertools.product生成第一列与第二列的所有组合,最终生成56*56=3136行数据(含表头)

数据量调整说明

按照需求中的多重集去重规则,唯一三元组共56个,总数据量为3136行。若您实际需要保留所有有序三元组(不排除多重集重复),只需移除去重步骤,直接对all_ordered_triples排序即可,此时总数据量为6^3×6^3=46656行。

内容的提问来源于stack exchange,提问作者Tim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 11:45:25