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

23c0lvtd  于 2023-05-05  发布在  Python
关注(0)|答案(2)|浏览(140)

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

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.

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

zzoitvuj

zzoitvuj1#

在调用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')]
8ehkhllq

8ehkhllq2#

我认为这是一个两步的问题。首先,将字符串内部列表转换为下面的列表(使用[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?

相关问题