Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 列出另一个列表的所有可能组合的2值元组_Python_List_Scipy - Fatal编程技术网

Python 列出另一个列表的所有可能组合的2值元组

Python 列出另一个列表的所有可能组合的2值元组,python,list,scipy,Python,List,Scipy,有这样的名单 ['Jack Matthews', 'Mick LaSalle', 'Claudia Puig', 'Lisa Rose', 'Toby', 'Gene Seymour'] 我如何制作一个列表,上面列表中所有可能的项目组合都将被存储,就像这样 [('Jack Matthews', 'Toby'), ('Jack Matthews', 'Claudia Puig'), ('Jack Matthews', 'Lisa Rose')] # and so on 我需要这个函数的以上元

有这样的名单

['Jack Matthews', 'Mick LaSalle', 'Claudia Puig', 'Lisa Rose', 'Toby', 'Gene Seymour']
我如何制作一个列表,上面列表中所有可能的项目组合都将被存储,就像这样

 [('Jack Matthews', 'Toby'), ('Jack Matthews', 'Claudia Puig'), ('Jack Matthews', 'Lisa Rose')] # and so on
我需要这个函数的以上元组

 def euclidean_distance(preferences_dict, person_1, person_2):
    shared_items = {}
    for item in preferences_dict[person_1]:
            if item in preferences_dict[person_2]:
                    shared_items[item] = 1

    if not len(shared_items):
            return
    sum_of_squares = sqrt(sum([pow(preferences_dict[person_1][item] - preferences_dict[person_2][item], 2) for item in preferences_dict[person_1] if item in preferences_dict[person_2]]))
    return 1/(1+sum_of_squares)
这个数据集

critics={'Lisa Rose': {'Lady in the Water': 2.5, 'Snakes on a Plane': 3.5,
'Just My Luck': 3.0, 'Superman Returns': 3.5, 'You, Me and Dupree': 2.5,
'The Night Listener': 3.0},
 'Gene Seymour': {'Lady in the Water': 3.0, 'Snakes on a Plane': 3.5,
'Just My Luck': 1.5, 'Superman Returns': 5.0, 'The Night Listener': 3.0,
'You, Me and Dupree': 3.5},
'Michael Phillips': {'Lady in the Water': 2.5, 'Snakes on a Plane': 3.0,
'Superman Returns': 3.5, 'The Night Listener': 4.0},
'Claudia Puig': {'Snakes on a Plane': 3.5, 'Just My Luck': 3.0,
'The Night Listener': 4.5, 'Superman Returns': 4.0,
'You, Me and Dupree': 2.5},
'Mick LaSalle': {'Lady in the Water': 3.0, 'Snakes on a Plane': 4.0,
'Just My Luck': 2.0, 'Superman Returns': 3.0, 'The Night Listener': 3.0,
'You, Me and Dupree': 2.0},
'Jack Matthews': {'Lady in the Water': 3.0, 'Snakes on a Plane': 4.5,
'The Night Listener': 4.5, 'Superman Returns': 4.0, 'You, Me and Dupree':    1.0},
'Toby': {'Snakes on a Plane':4.5,'You, Me and Dupree':1.0,'Superman Returns':4.0}}
我想计算每部电影中两位评论家之间的欧几里德距离。 除了重复的批评之外,什么是计算每对批评的最佳方法 我考虑过这个

names = dict([(critic, critics.keys()) for critic in critics.keys()])
for critic in names.keys():
    if critic in names[critic]:
            names[critic].remove(critic)
actual_distance = []
for base_critic in names.keys():
    for critic in names[base_critic]:
            actual_distance.append(euclidean_distance(critics, base_critic, critic))
这段代码的问题在于它有重复的值,因为name['Jack Matthews']有值'Toby',反之亦然更新:现在,当您更新问题时,情况看起来有点不同。这里有一个使用pandas和numpy的快速片段,为了简单起见,我们将缺失的评分替换为零:

>>> import itertools
>>> names = ['Jack Matthews', 'Mick LaSalle', 'Claudia Puig', 'Lisa Rose', 'Toby', 'Gene Seymour']
>>> combos = itertools.combinations(names, 2)
>>> for name1, name2 in combos:
...     print(name1, name2)
... 
('Jack Matthews', 'Mick LaSalle')
('Jack Matthews', 'Claudia Puig')
('Jack Matthews', 'Lisa Rose')
('Jack Matthews', 'Toby')
('Jack Matthews', 'Gene Seymour')
('Mick LaSalle', 'Claudia Puig')
('Mick LaSalle', 'Lisa Rose')
('Mick LaSalle', 'Toby')
('Mick LaSalle', 'Gene Seymour')
('Claudia Puig', 'Lisa Rose')
('Claudia Puig', 'Toby')
('Claudia Puig', 'Gene Seymour')
('Lisa Rose', 'Toby')
('Lisa Rose', 'Gene Seymour')
('Toby', 'Gene Seymour')
import numpy as np
importport pandas as pd
from itertools import combinations

df = pd.DataFrame(critics).T.fillna(0)

好了。Gene Seymour和Toby强烈不同意他们的评级。

如果你还想进行自配对,也可以使用itertools.product。这将返回相同的配对两次,这可能是OP想要的,但不是我从单词组合中猜到的。鉴于投票结果不佳,我们将在缺少规格的情况下预订;当然,你是对的,求你了!如果你做过研究,展示出来。From:解释你是如何遇到你试图解决的问题的,以及任何阻碍你自己解决问题的困难。
distances = []
for critic1, critic2 in combinations(df.index, 2):
    ratings1 = df.ix[critic1].values
    ratings2 = df.ix[critic2].values
    dist = np.sqrt(np.sum(ratings1 - ratings2) ** 2) # euclidian distance
    distances.append((dist, critic1, critic2))

pd.DataFrame(distances, columns=['distance', 'critic1', 'critic2']).sort('distance', ascending=False).head(5)