短い文字列、つまり「kmer」に一致する可能性のあるすべてのファジー文字列一致を計算するスクリプトを作成しようとしています。Python 2.7.X で動作する同じコードは、Python 3.3 で非決定論的な答えを返します。 .X で、その理由がわかりません。
コード内でディクショナリ、itertools.product、および itertools.combinations を反復処理しますが、それらすべてを中断または継続なしで完了するまで反復処理します。さらに、すべての結果を反復処理中の辞書ではなく、別の辞書に保存します。要するに、私は明らかな間違いを犯していないのに、Python2 と Python3 で動作が異なるのはなぜですか?
以下のサンプル、わずかに簡略化されたコード:
import itertools
def find_best_fuzzy_kmer( kmers ):
for kmer, value in kmers.items():
for similar_kmer in permute_string( kmer, m ):
# Tabulate Kmer
def permute_string( query, m ):
query_list = list(query)
output = set() # hold output
for i in range(m+1):
# pre-calculate the possible combinations of new bases
base_combinations = list(itertools.product('AGCT', repeat=i))
# for each combination `idx` in idxs, replace str[idx]
for positions in itertools.combinations(range(len(query_list)), i):
for bases in base_combinations:
# Generate Permutations and add to output
return output