如何獲取串列中的所有唯一對,允許重復?
例如,對于[20, 20, 19]我想要的串列(20, 20)和(20, 19)。
因為[20, 20, 19, 19, 18]我想要(20, 20), (20, 19), (20, 18),(19, 19)和(19, 18)
我真的不介意回傳什么物件(串列、元組、字典、集合等),只要我可以遍歷每一對,并提取兩個數字
uj5u.com熱心網友回復:
您可以在集合理解中使用:itertools.combinations
>>> from itertools import combinations
>>> lst_1 = [20, 20, 19]
>>> {comb for comb in combinations(lst_1, r=2)}
{(20, 19), (20, 20)}
>>> lst_2 = [20, 20, 19, 19, 18]
>>> {comb for comb in combinations(lst_2, r=2)}
{(20, 20), (19, 19), (20, 19), (19, 18), (20, 18)}
或者直接轉換成一個集合:
>>> set(combinations(lst_1, r=2))
{(20, 19), (20, 20)}
>>> set(combinations(lst_2, r=2))
{(20, 20), (19, 19), (20, 19), (19, 18), (20, 18)}
uj5u.com熱心網友回復:
您可以使用雙 for 回圈,其中在每次迭代中洗掉前一個元素。我認為這個解決方案會比itertools.combinations方法更快,特別是如果串列很大,因為它不必先找到所有組合。
def get_pairs(l):
out = []
for i in l:
l.remove(i)
for j in l:
if (i,j) in out or (j,i) in out:
continue
else:
out.append((i,j))
return out
輸出:
>>> get_pairs([20, 20, 19, 19, 18])
[(20, 20), (20, 19), (20, 18), (19, 19), (19, 18)]
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/388318.html
