2017-05-23 13 views
4

は、私が行うことができます。Rustでは、itertools.productにPythonの "repeat"パラメータを複製する適切な方法はありますか? Pythonで

#[macro_use] extern crate itertools; 

for kmer in iproduct!("AGTC".chars(), "AGTC".chars(), "AGTC".chars()){ 
    println!("{:?}", kmer); 
} 

しかし、私はk=4またはk=5たい場合:

from itertools import product 

k = 3 
for kmer in product("AGTC", repeat=k): 
    print(kmer) 

は錆では、私はによってk=3の動作を強制することができますか?

+0

あなたが本当にタプルを生成する必要があるかどうかを説明できますか?引数 'k'は実行時にしか知られていないので、' k'値のRustタプルを生成することはできません。 –

+0

タプルは必ずしも必要ではありません。文字列が望ましいでしょう。私は最終的にこれらのkmersのために長い文字列を検索するつもりです。 –

答えて

3

任意のkの任意の型に対する適切な汎化を書くことは、戻り値の型が任意のサイズのタプルになる可能性があるため困難です。あなただけStringに仕事をしたいと、それは非常に簡単です:playground

fn kproduct(seq: String, k: u32) -> Vec<String> { 
    match k { 
     0 => vec![], 
     1 => seq.chars().map(|c| c.to_string()).collect(), 
     2 => iproduct!(seq.chars(), seq.chars()).map(|(a, b)| format!("{}{}", a, b)).collect(), 
     _ => iproduct!(kproduct(seq.clone(), k - 1), seq.chars()).map(|(a, b)| format!("{}{}", a, b)).collect(), 
    } 
} 
+0

これはまさに私が達成したかったものです。ありがとうございました! –

関連する問題