python中列表上的组合

python中列表上的组合,python,list,combinations,itertools,Python,List,Combinations,Itertools,因此,我在python中得到了如下列表: [1,2,3,4] [(1,3),(2,3),(3,4)] 我想要数字3和每个数字之间的组合如下: [1,2,3,4] [(1,3),(2,3),(3,4)] 有什么我可以用的吗?我知道有一种叫做itertools的东西,但我有点新,所以我不知道如何使用它 谢谢大家! 您可能需要使用列表理解: orig_list = [1,2,3,4] [(entry, 3) for entry in orig_list if entry != 3] # [(1

因此,我在python中得到了如下列表:

[1,2,3,4]
[(1,3),(2,3),(3,4)]
我想要数字3和每个数字之间的组合如下:

[1,2,3,4]
[(1,3),(2,3),(3,4)]
有什么我可以用的吗?我知道有一种叫做itertools的东西,但我有点新,所以我不知道如何使用它


谢谢大家!

您可能需要使用列表理解:

orig_list = [1,2,3,4]
[(entry, 3) for entry in orig_list if entry != 3] # [(1, 3), (2, 3), (4, 3)]
如果您对重复值不感兴趣,可以将其设置为一个集合:

orig_list = set([1,2,3,4])
[(entry, 3) for entry in orig_list if entry != 3] # [(1, 3), (2, 3), (4, 3)]
您可以使用:

l = [1,2,3,4]
[(l[i], 3) for i in range(l.index(3))] + [(3, l[i]) for i in range(l.index(3)+1, len(l))]
它给出了输出:

[(1, 3), (2, 3), (3, 4)]

一种简单的方法是使用循环:

list2 = []
for x in list1:
     list2.append((x,3))
print(list2)
如果您想摆脱(3,3),请使用:


您可以将列表理解用于:

输出:

[(1, 3), (2, 3), (3, 4)]
[(1, 3), (2, 3), (4, 3)]
更好的是,您可以使用
itertools。重复

from itertools import repeat

l = [1,2,3,4]
[(f, s) for f, s in zip(l, repeat(3)) if f != 3]
输出:

[(1, 3), (2, 3), (3, 4)]
[(1, 3), (2, 3), (4, 3)]

itertools组合和排列有很好的记录,在这个网站上有很多样本。试试看你不需要
itertools
。你想要这个输出:
[(1,2),(1,3),(1,4),(2,3),(2,4),(3,4)]
?不需要,只是从一个位置(在本例中是3)到另一个位置元素的顺序很重要?(4,3)可以吗?作为一个元素?注意:这将把一个
O(n)
问题变成
O(n²)
问题(n选择2是
n*(n-1)/2
work);对于生成的每个值,都必须过滤掉~
n
。如果输入长度为4,则可以,如果输入长度为1000,则可以。我的第二个解决方案是O(n)时间复杂度,应该可以,可能是最快的。如果您不想使用该变量,则通常使用
\uu
作为变量。这很好,它帮助了我很多谢谢!,如果我也想要另一个职位呢?不只是(1,3)还有(3,1)?