簡體   English   中英

如何在數組中創建元素的所有組合?

[英]How to make all combinations of the elements in an array?

我有一份清單。 它包含x個列表,每個列表都包含y個元素。 我想將每個元素與所有其他元素配對,只需一次,(a,b = b,a)

編輯:這被批評為太模糊。所以我將描述歷史。 我的函數產生隨機方程並使用遺傳技術,變異和雜交它們,選擇適應性。 經過多次迭代后,它返回一個包含12個對象的列表,按其“等式”屬性的適合度排序。 使用'parallel python'模塊運行此函數8次,返回包含8個12個對象列表(每個對象具有方程屬性)的列表。 現在,在每個列表中,12個對象已經相互交叉。 我希望將列表中的每個對象與所有其他列表中的所有其他對象進行交叉繁殖,但不要與它自己的列表中的對象進行交叉混合。 (哇!)

itertools.product是你的朋友。

關於刪除重復項,嘗試使用一組集。

現在你想要的更清楚一點:

import itertools

def recombinate(families):
    "families is the list of 8 elements, each one with 12 individuals"
    for fi, fj in itertools.combinations(families, 2):
        for pair in itertools.product(fi, fj):
            yield pair

基本上,采用所有2個系列組合(平行生成的系列)和每對系列,產生所有元素對。

你還沒有完全清楚你需要什么。 聽起來像itertools應該有你需要的東西。 也許你想要的是你的大列表中列表的itertools.product的itertools.combinations。

@fortran:你不能擁有一套套裝。 你可以有一套frozensets,但是根據這里有重復的真正含義,可能不需要。

首先,請不要將其稱為“陣列”。 您正在使用列表列表。 在Python中,數組是由數組模塊提供的不同類型的數據結構。

此外,您的應用程序聽起來像一個矩陣。 如果你真的在進行矩陣操作,你應該調查Numpy包。

乍一看,你的問題聽起來像zip()函數會解決的問題或者itertools.izip()。 你一定要仔細閱讀itertools模塊的文檔,因為它有各種列表操作,它們的運行速度比你在Python中編寫的任何東西都要快。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM