我得到了一个像这样的Python列表:
[1,2,3,4]
我希望你能将数字3与所有数字进行组合,类似于以下内容:
[(1,3),(2,3),(3,4)]
有没有什么工具可以用?我知道有一个叫itertools的库,但是我还是新手,不太清楚如何使用。
谢谢!
我得到了一个像这样的Python列表:
[1,2,3,4]
我希望你能将数字3与所有数字进行组合,类似于以下内容:
[(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)]
list2 = []
for x in list1:
list2.append((x,3))
print(list2)
如果你想要去掉 (3,3),请使用:
list2 = []
for x in list1:
if x != 3:
list2.append((x,3))
print(list2)
您可以使用列表推导式和itertools.combinations:
import itertools
[e for e in itertools.combinations([1,2,3,4], 2) if 3 in e]
输出:
[(1, 3), (2, 3), (3, 4)]
itertools.repeat
: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), (4, 3)]
O(n)
的问题转化为一个 O(n²)
的问题(n 选 2 是 n * (n - 1) / 2
的工作量);对于你生成的每个值,你都必须过滤掉 ~`n`。如果输入长度为 4,那么还好,但如果长度为 1000,则不太好。 - ShadowRanger你可以使用:
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)]
itertools
来完成这个任务。 - Sayandip Dutta[(1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)]
? - kederrac