python中列表上的组合
因此,我在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
[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)?