Python CSV转换所有行和列的组合

Python CSV转换所有行和列的组合,python,csv,Python,Csv,我有一个csv文件的名称和这些名称的变化。该文件如下所示: Abigail | Abby | Abbey | Abbie Abraham | Abe | | Aidan | Aodh | Aiden | 等等 我想知道是否有一个python脚本可供我使用,它可以为我这样配对: Abigail Abby Abigail Abbey, Abigail Abbie, Abby Abbey, Abby Abbie, Abbey Abbie, Abraham Abe, Aidan Ao

我有一个csv文件的名称和这些名称的变化。该文件如下所示:

Abigail | Abby | Abbey | Abbie
Abraham | Abe  |       |
Aidan   | Aodh | Aiden |
等等

我想知道是否有一个python脚本可供我使用,它可以为我这样配对:

Abigail Abby
Abigail Abbey,
Abigail Abbie,
Abby Abbey,
Abby Abbie,
Abbey Abbie,
Abraham Abe,
Aidan Aodh,
Aidan Aiden,
Aodh Aiden

即每行获得所有可能的组合。有人对此有什么建议吗?

您可以使用列表理解:

import csv
def row_combo(d):
   return [[a, k] for i, a in enumerate(d) for k in d[:i]+d[i+1:]]

r = [k for i in csv.reader(open('file.csv'), delimiter='|') for k in row_combo(i)]
final_r = [[a, b] for j, k in r if (a:=j.strip()) and (b:=k.strip())] #clean data
输出:

[['Abigail', 'Abby'], ['Abigail', 'Abbey'], ['Abigail', 'Abbie'], ['Abby', 'Abigail'], ['Abby', 'Abbey'], ['Abby', 'Abbie'], ['Abbey', 'Abigail'], ['Abbey', 'Abby'], ['Abbey', 'Abbie'], ['Abbie', 'Abigail'], ['Abbie', 'Abby'], ['Abbie', 'Abbey'], ['Abraham', 'Abe'], ['Abe', 'Abraham'], ['Aidan', 'Aodh'], ['Aidan', 'Aiden'], ['Aodh', 'Aidan'], ['Aodh', 'Aiden'], ['Aiden', 'Aidan'], ['Aiden', 'Aodh']]

首先,您必须将csv文件转换为以下列表:

import csv

with open('csv.csv') as file:
    names = [list(filter(None, row)) for row in csv.reader(file)]
你得到的是:

names = [["Abigail","Abby","Abbey","Abbie"],["Abraham","Abe"],["Aidan","Aodh","Aiden"]]
然后你可以很简单地这样做:

combinations = []

for row in names:
    for i,n1 in enumerate(row):
        for n2 in row[i+1:]:
            combinations.append((n1,n2))

结果:

[('Abigail', 'Abby'), ('Abigail', 'Abbey'), ('Abigail', 'Abbie'), ('Abby', 'Abbey'), ('Abby', 'Abbie'), ('Abbey', 'Abbie'), ('Abraham', 'Abe'), ('Aidan', 'Aodh'), ('Aidan', 'Aiden'), ('Aodh', 'Aiden')]

太好了,谢谢。要删除重复项,我刚刚做了
mylist=[k代表k,v代表groupby(排序(最终))]
谢谢,我刚刚提交了一个编辑来添加
row=list(filter(None,row))
以删除空字符串