列表中每个列表的所有可能对

问题描述 投票:0回答:2

我有以下代码作为示例(这是基于文本定义的成对相似性):

import pandas as pd

df = pd.read_csv("pairings.csv")

sample_list = df['fruit'].tolist()

sample_list 的输出如下:

['Apple, Orange', 'Pear, Apple, Grape',
 'Plum, Orange, Pear, Banana, Grape, Apple'] 

我再次任意选择水果作为示例,我的实际数据集根据余弦相似性找到技术之间的分组,并根据它们的定义生成技术分组。

我试过了

for n in range(len(sample_list) + 1):
     list_combinations += list(combinations(sample_list,n))
     print(list_combinations)

for i in sample_test:
    res = [(a, b) for idx, a in enumerate(sample_test) for b in sample_test[idx + 1:]]

但他们没有工作。我的目标是获得一个新的 csv,它显示列表中每个列表的所有对,这样它就可以读作(括号不会在那里,这只是为了进一步解释):

0        1
0 Apple  Orange [from list 1]
1 Pear   Apple [from list 2]
2 Pear   Grape [from list 2]
3 Apple  Grape [from list 2]
4 Plum   Orange [from list 3]
5 Plum   Pear [from list 3]
6 etc. 

我需要知道如何遍历每个列表并获得所有可能的对。谢谢!

python list combinations pairwise
2个回答
0
投票

我认为这是一个两步问题。首先,将字符串内部列表转换为下面的列表(带有

[elem.strip() for elem in stringylist.split(',')]
)。然后,从该内部列表中找到所有元素对。

我们可以编写自己的方法来做到这一点,或者我们可以使用

itertools.combinations
为我们做到这一点。下面我选择使用itertools

from itertools import combinations

samplelist = [
    'Apple, Orange', 'Pear, Apple, Grape',
     'Plum, Orange, Pear, Banana, Grape, Apple'
]

def all_pairs(inlist):
    ret = []
    for liststr in inlist:
        innerlist = [elem.strip() for elem in liststr.split(',')]
        ret += list(combinations(innerlist, 2))
    return ret

all_pairs(samplelist)
""" prints
[('Apple', 'Orange'),
 ('Pear', 'Apple'),
 ('Pear', 'Grape'),
 ('Apple', 'Grape'),
 ('Plum', 'Orange'),
 ('Plum', 'Pear'),
 ('Plum', 'Banana'),
 ('Plum', 'Grape'),
 ('Plum', 'Apple'),
 ('Orange', 'Pear'),
 ('Orange', 'Banana'),
 ('Orange', 'Grape'),
 ('Orange', 'Apple'),
 ('Pear', 'Banana'),
 ('Pear', 'Grape'),
 ('Pear', 'Apple'),
 ('Banana', 'Grape'),
 ('Banana', 'Apple'),
 ('Grape', 'Apple')]
"""

这解决了您遍历并找到所有对的问题。我想您可以将成对列表转换为 CSV?


0
投票

在调用

combinations
.之前,您需要将字符串拆分为列表。

result = []
for s in sample_list:
    result.extend(combinations(s.split(', '), r=2))

print(result)

输出:

[('Apple', 'Orange'),
 ('Pear', 'Apple'),
 ('Pear', 'Grape'),
 ('Apple', 'Grape'),
 ('Plum', 'Orange'),
 ('Plum', 'Pear'),
 ('Plum', 'Banana'),
 ('Plum', 'Grape'),
 ('Plum', 'Apple'),
 ('Orange', 'Pear'),
 ('Orange', 'Banana'),
 ('Orange', 'Grape'),
 ('Orange', 'Apple'),
 ('Pear', 'Banana'),
 ('Pear', 'Grape'),
 ('Pear', 'Apple'),
 ('Banana', 'Grape'),
 ('Banana', 'Apple'),
 ('Grape', 'Apple')]
© www.soinside.com 2019 - 2024. All rights reserved.