对每列中的项目进行独特组合

我有一个看起来像这样的 CSV 文件:


    Person 1  Person 2  Person 3   Person 4

a      Apple     Apple       Yam       Beer

b     Orange    Orange   Doritos     Cheese

c  Pineapple  Nintendo     Apple      Sushi

d      Pizza    Cheese    Orange  Pineapple

e    Doritos     Fanta     Pizza     Orange

f       Coke    Fajita      Cake       Coke

g Strawberry     Juice      Beer        Tea

h Blackberry                           Yam

i      Sushi

每列代表每个人,每一行是每个对应(行)人喜欢的项目。


我正在尝试提出一种算法,可以给我一个独特组合的列表,每个项目只使用一次,同时给一个人一个他想要的项目。


就像是:


1)

    Person 1  Person 2  Person 3   Person 4

       Apple    Orange       Yam       Beer


2)

    Person 1  Person 2  Person 3   Person 4

       Apple    Orange       Yam     Cheese

.. 很快。


请有人指导我如何解决这个问题?我是python的新手。


守着星空守着你
浏览 134回答 4
4回答

蛊毒传说

没有图书馆:pools = ['Apple', 'Orange', ...], ['Apple', 'Orange', ...], [...], [...]]result = [[]]for pool in pools:    result = [x+[y] for x in result for y in pool if y not in x]print(result)

繁星点点滴滴

pools = [['Apple', 'Orange','Pineapple'], ['Apple', 'Orange','pizza'],['Apple',          'Orange','pizza','beer']]results = []for pool in pools:      results.append([item for item in pool if item not in results][0])Output: ['Apple', 'Orange', 'pizza']

慕娘9325324

我会使用 itertools.product() 来生成组合,然后使用 set() 选择有效组合(没有重复项)。是这样的:from itertools import productperson_1 = ['Apple', 'Orange', 'Pineapple', ...]person_2 = ['Apple', 'Orange', 'Nintendo', ...]person_3 = ['Yam', 'Doritos', 'Apple', ...]person_4 = ['Beer', 'Cheese', 'Sushi', ...]for p in product(person_1, person_2, person_3, person_4):    if len(p) == len(set(p)):        print(p)

大话西游666

这是使用熊猫的另一种方法:import pandas as pdd= {"Person 1" : ['Apple', 'Orange', 'Pineapple', ...],"Person 2" : ['Apple', 'Orange', 'Nintendo', ...],"Person 3" : ['Yam', 'Doritos', 'Apple', ...],"Person 4" : ['Beer', 'Cheese', 'Sushi', ...]}df = pd.DataFrame(data=d)df=df.drop_duplicates()df=df.dropna(axis=0)print(df)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python