为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

守着星空守着你 2023-06-20 14:39:29
我有一个看起来像这样的 CSV 文件:    Person 1  Person 2  Person 3   Person 4a      Apple     Apple       Yam       Beerb     Orange    Orange   Doritos     Cheesec  Pineapple  Nintendo     Apple      Sushid      Pizza    Cheese    Orange  Pineapplee    Doritos     Fanta     Pizza     Orangef       Coke    Fajita      Cake       Cokeg Strawberry     Juice      Beer        Teah Blackberry                           Yami      Sushi每列代表每个人,每一行是每个对应(行)人喜欢的项目。我正在尝试提出一种算法,可以给我一个独特组合的列表,每个项目只使用一次,同时给一个人一个他想要的项目。就像是:1)    Person 1  Person 2  Person 3   Person 4       Apple    Orange       Yam       Beer2)    Person 1  Person 2  Person 3   Person 4       Apple    Orange       Yam     Cheese.. 很快。请有人指导我如何解决这个问题?我是python的新手。
查看完整描述

4 回答

?
蛊毒传说

TA贡献1895条经验 获得超3个赞

没有图书馆:


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)


查看完整回答
反对 回复 2023-06-20
?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

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']


查看完整回答
反对 回复 2023-06-20
?
慕娘9325324

TA贡献1783条经验 获得超4个赞

我会使用 itertools.product() 来生成组合,然后使用 set() 选择有效组合(没有重复项)。


是这样的:


from itertools import product


person_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)


查看完整回答
反对 回复 2023-06-20
?
大话西游666

TA贡献1817条经验 获得超14个赞

这是使用熊猫的另一种方法:


import pandas as pd



d= {"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)


查看完整回答
反对 回复 2023-06-20
  • 4 回答
  • 0 关注
  • 106 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信