python访问序列元素的编号用什么括起来_python-重新编号数组中元素的有效方法...
我是python的新手,正在嘗試實現一種遺傳算法,但需要其中一項操作的代碼方面的幫助.
我是這樣提出問題的:
>每個人我都由一串M個整數表示
> I中的每個元素e取值從0到N
> 0到N之間的每個數字都必須在I中至少出現一次
> e的值并不重要,只要每個唯一值元素采用相同的唯一值(將它們視為類標簽)即可
> e小于或等于N
>每個I的N可以不同
應用交叉操作后,我可能會生成違反這些約束中一個或多個約束的子對象,因此我需要找到一種方法來對元素進行重新編號,以使它們保留其屬性,但符合約束條件.
例如:
parent_1 (N=5): [1 3 5 4 2 1|0 0 5 2]
parent_2 (N=3): [2 0 1 3 0 1|0 2 1 3]
*** crossover applied at "|" ***
child_1: [1 3 5 4 2 1 0 2 1 3]
child_2: [2 0 1 3 0 1 0 0 5 2]
child_1顯然仍然滿足所有約束,因為N = 5且所有值0-5在數組中至少出現一次.
問題出在子2上-如果我們使用max(child_2)計算N的方式,我們得到的值為5,但是如果我們計算唯一值的數量,則N = 4,這就是N的值.我要問的(以很長的路要走,這是理所當然的)是一種好的,pythonic的方法:
child_2: [2 0 1 3 0 1 0 0 5 2]
*** some python magic ***
child_2': [2 0 1 3 0 1 0 0 4 2]
*or*
child_2'': [0 1 2 3 1 2 1 1 4 0]
child_2”用來說明值本身并不重要,只要唯一值的每個元素映射到相同值,就可以滿足約束條件.
到目前為止,這是我嘗試過的:
value_map = []
for el in child:
if el not in value_map:
value_map.append(el)
for ii in range(0,len(child)):
child[ii] = value_map.index(child[ii])
這種方法可以工作并返回類似于child_2的結果,但是我無法想象它在字符串上兩次迭代的方式非常有效,所以我想知道是否有人對如何使其更好提出任何建議.
謝謝,對于這么簡單的問題這么長時間的帖子,我們深表歉意!
總結
以上是生活随笔為你收集整理的python访问序列元素的编号用什么括起来_python-重新编号数组中元素的有效方法...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python跨目录调用_python 跨
- 下一篇: 联想电脑硬盘保护系统EDU8.0.1is