Python 如何使用现有元组列表创建新的元组列表

Python 如何使用现有元组列表创建新的元组列表,python,list,tuples,Python,List,Tuples,我有一个这样的元组列表- list1 = [('alpha', 'beta'), ('beta','gama') ('alpha','lamda') ('gama', 'lamda'), ('euphor', 'tuphor')] 我想根据- 对于原始列表中不存在的每一对,将包含在新列表中,如下所示: new_list = [('alpha','gama'), (alpha, tuphor),

我有一个这样的元组列表-

list1 = [('alpha', 'beta'),
         ('beta','gama')
         ('alpha','lamda')
         ('gama', 'lamda'),
         ('euphor', 'tuphor')]
我想根据-

对于原始列表中不存在的每一对,将包含在新列表中,如下所示:

new_list = [('alpha','gama'),
            (alpha, tuphor),
            (alpha, euphor),
            (beta,lamda),
            ()...]
同样地

有人能建议在python中这样做的方法吗


谢谢。

这里有一个使用
itertools
和集合的解决方案:

list1 = [('alpha', 'beta'),
         ('beta','gama'), 
         ('alpha','lamda'), 
         ('gama', 'lamda'),
         ('euphor', 'tuphor')]

all_items = set(itertools.chain(*list1))

all_pairs = set(itertools.product(all_items, all_items))
new_pairs = all_pairs.difference(list1)
结果(
新的\u对
)是:


下面是一个使用
itertools
和集合的解决方案:

list1 = [('alpha', 'beta'),
         ('beta','gama'), 
         ('alpha','lamda'), 
         ('gama', 'lamda'),
         ('euphor', 'tuphor')]

all_items = set(itertools.chain(*list1))

all_pairs = set(itertools.product(all_items, all_items))
new_pairs = all_pairs.difference(list1)
结果(
新的\u对
)是:

你可以

  • 收集不同的物品
  • 计算所有排列
  • 获取所有组合与现有组合之间的差异
你可以

  • 收集不同的物品
  • 计算所有排列
  • 获取所有组合与现有组合之间的差异
来自itertools导入组合的

列表1=[('alpha','beta'),
(‘beta’,‘gama’),
('alpha','lamda'),
(“gama”、“lamda”),
('euphor','tuphor')]
元素=列表(设置([e代表列表中的l,e代表列表中的e])#查找所有唯一的元素
完成列表=列表(组合(元素,2))#生成所有可能的组合
#转换为集合以取消顺序
set1=[为列表1中的l设置(l)]
complete_set=[在complete_列表中为l设置(l)]
#在“complete_set”中查找集合,但不在“set1”中查找集合`
ans=[如果l不在集合1中,则完整集合中l的列表(l)]
输出:

[['euphor', 'lamda'],
 ['euphor', 'gama'],
 ['euphor', 'beta'],
 ['euphor', 'alpha'],
 ['lamda', 'beta'],
 ['lamda', 'tuphor'],
 ['gama', 'alpha'],
 ['gama', 'tuphor'],
 ['beta', 'tuphor'],
 ['tuphor', 'alpha']]
来自itertools导入组合的

列表1=[('alpha','beta'),
(‘beta’,‘gama’),
('alpha','lamda'),
(“gama”、“lamda”),
('euphor','tuphor')]
元素=列表(设置([e代表列表中的l,e代表列表中的e])#查找所有唯一的元素
完成列表=列表(组合(元素,2))#生成所有可能的组合
#转换为集合以取消顺序
set1=[为列表1中的l设置(l)]
complete_set=[在complete_列表中为l设置(l)]
#在“complete_set”中查找集合,但不在“set1”中查找集合`
ans=[如果l不在集合1中,则完整集合中l的列表(l)]
输出:

[['euphor', 'lamda'],
 ['euphor', 'gama'],
 ['euphor', 'beta'],
 ['euphor', 'alpha'],
 ['lamda', 'beta'],
 ['lamda', 'tuphor'],
 ['gama', 'alpha'],
 ['gama', 'tuphor'],
 ['beta', 'tuphor'],
 ['tuphor', 'alpha']]

您只需获得原始列表中的唯一名称,然后应用
if
条件。试试这个,如果你遇到任何问题,请告诉我

new_list = []
names = set(np.array(list1).ravel())
for i in names:
    for j in names:
        if i!=j:
            if ((i,j) not in list1) & ((j,i) not in list1) & ((i,j) not in new_list) & ((j,i) not in new_list):
                new_list.append((i,j))

您只需获得原始列表中的唯一名称,然后应用
if
条件。试试这个,如果你遇到任何问题,请告诉我

new_list = []
names = set(np.array(list1).ravel())
for i in names:
    for j in names:
        if i!=j:
            if ((i,j) not in list1) & ((j,i) not in list1) & ((i,j) not in new_list) & ((j,i) not in new_list):
                new_list.append((i,j))

但是,也会生成一些重复项,如[(('gama',tuphor'),('tuphor',gama')]您可以建议如何删除这些项吗?我已经更新了代码。我刚刚应用了另外两个条件来检查元组是否存在于
新列表中。
。请检查它,然后让我知道它是否正常。但是,也会生成一些重复项,如[(('gama','tuphor'),('tuphor','gama')]你能告诉我如何删除这些吗?我已经更新了代码。我刚刚应用了另外两个条件来检查元组是否存在于
新列表中
。检查一下,然后告诉我现在是否可以。您好,谢谢,尽管输出中也生成了一些不需要的副本。您能告诉我如何删除这些吗?@PranjitaChakraborty duplicate,其中?
all_perm
不包含任何副本,
new_perm
既不包含('alpha','euphor')('euphor','alpha'))列表中包含这样的术语。它们的位置差异不会使它们成为不同的实体,这就是我的意思duplicate@PranjitaChakraborty使用组合,因此,我更新了我的postHi,谢谢,不过也生成了一些重复项,这在输出中是不需要的。您能建议如何删除这些吗?@PranjitaChakraborty duplicate,其中?
all_perm
不包含任何副本,
new_perm
均不包含('alpha','euphor')('euphor','alpha'))列表中包含这样的术语。它们的位置差异不会使它们成为不同的实体,这就是我的意思duplicate@PranjitaChakraborty使用组合,因此,我已经更新了我的POST谢谢你这么多。输出正是我想要的。非常感谢你知道。你可以考虑接受最合适的答案谢谢。你是这么多。产出正是我想要的。非常感谢你知道。你可以考虑接受最合适的答案。你可以考虑接受一个答案来奖励那些对你有帮助的人,或者至少评论一下你错过了什么;你可以考虑接受一个答案来奖励那些帮助过你的人,或者至少发表评论来解释缺失的东西;)