2017-05-23 1 views
4

, 내가 할 수있는 :녹에서, itertools.product에서 파이썬의 "반복"매개 변수를 복제하는 올바른 방법은 무엇입니까? 파이썬에서

#[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' 값의 녹스 튜플을 생성 할 수 없습니다. –

+0

튜플이 꼭 필요한 것은 아닙니다. 문자열이 바람직합니다. 나는 결국이 kmers에 대해 더 긴 문자열을 검색 할 것입니다. –

답변

3

모든 유형에 대해 적절한 일반화를 작성하는 것은 반환 유형이 어떤 크기의 튜플이 될 수 있기 때문에 어렵습니다. 당신은 단지 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

이것은 정확하게 달성하고자하는 것입니다. 고맙습니다! –