2017-05-23 44 views
4

在Python,我可以這樣做:在Rust中,在itertools.product中複製Python的「repeat」參數的正確方法是什麼?

from itertools import product 

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

生鏽,我可以強制的k=3由行爲:

#[macro_use] extern crate itertools; 

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

,如果我想要的東西k=4k=5但?

+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

這正是我想要完成的;謝謝! –

相關問題