2013-05-22 2 views
2

이것은 매우 위험한 일입니다.python : 불규칙한 반복자 만들기

x = 3,4,9,10, ..., 6k+3, 6k+4 

그래서 난 다른 곳에서 사용할 수 있습니다 :

y = [something(i) for i in x] 

모든 아이디어를 어떻게 다음과 같은 순서를 만들 수 있습니까? 나는 하나를 생각할 수 없다.

+0

을하고 결국? – mb14

+0

더 명확하게 말하도록 –

+2

아마도 커피가 더 필요합니다. 시퀀스의 패턴은 정확히 무엇입니까? –

답변

6

@JasonS에 의한 대답이 가장 읽을 수 있지만, 이것은 좋은 한 줄

def F(N): 
    return (6*(i//2) + 3+(i%2) for i in xrange(N)) 

>>> list(F(10)) 
[3, 4, 9, 10, 15, 16, 21, 22, 27, 28] 
+0

불행하게도 질문에 대답하는 임의의 값에 대해이 함수의 결과가 필요하기 때문에 실제로 질문에 대답하지 않습니다. 목록 또는 다른 시퀀스를 포함 할 수 있습니다. – kindall

+0

@kindall 나는 그것이 완전한 대답이 아니라는 것에 동의하지만, OP가 'for i in x'라고 말했을 때,'x'는이 끝없는 순서를 가리킨다 고 생각했습니다. OP는 자신의 필요에 맞게이 기능을 편집 할 수 있지만 명확한 설명을 위해 – jamylak

+0

을 물어볼 것입니다. 이제는 – jamylak

2
여기에 문제가 기능을 사용하면 튜플의 목록을 얻을 것이다 의미하는 두 개의 값을 반환해야한다는 것입니다

이다, 원하는 값의 단순한 목록이 아닙니다. 구출에 itertools.chain!

from itertools import chain 

def something(x): 
    return 6 * x + 3, 6 * x + 4 

x = [3, 5, 7] 
y = list(chain.from_iterable(something(i) for i in x)) 
+0

+1이라고 대답 할 만하지만, 'chain.from_iterable'을 사용해야합니다. – jamylak

+0

전화를 걸면 간단하게 처리 할 수 ​​있습니다. – kindall

4

흠, 난 그냥 질문은이

def indicesGenerator(N): 
    for i in xrange(0, N, 6): 
     yield i+3 
     yield i+4 
+0

... 나는 '범위'가 아닌 큰 N에 대해 'xrange'라고 가정합니다. –

+0

+1 다른 두 가지 방법보다 훨씬 명확합니다. 내 대답을 받아 들여야합니다.) – jamylak

+0

내 대답이 다음으로 변경되었습니다. 'xrange'도 사용하십시오, 그러나 나는 여전히 이것이 가장 읽기 쉽다고 생각합니다. – jamylak

관련 문제