2017-01-24 4 views
0

私はall_urlsというリストを持っています。私は無限にリストを反復しようとしています。私は始めたいインデックスiを持っています。たとえば、次のように開始インデックスを指定している間に無限にリストを反復処理できますか?

www.google.com

www.facebook.com

www.linkednin.com

www.yahoo.com

www.microsoft.com

私はlinkedinから繰り返しを開始したいと思いますnfiniteループ。

私は、このリンクを見て試してみました:

How can I infinitely loop an iterator in Python, via a generator or other?

が、このリンクは、私はいくつかの中間点から開始することができますどのように指定されていません。

私は

for url in itertools.cycle(all_urls[i:]): 
     print "Process URL : " + url 

を試してみましたが、それは仕事をdoesntの。

答えて

2

いくつかのオプションがあります。おそらく最も簡単なオプションは、サイクルに新しいリストを構築することです:私は提案します

urls = all_urls[i:] + all_urls[:i] 
for url in itertools.cycle(urls): 
    print(url) 

第二の溶液は、サイクルの最初のi - 1の要素を単に消費することである。

# From https://docs.python.org/2/library/itertools.html#recipes 
def consume(iterator, n): 
    "Advance the iterator n-steps ahead. If n is none, consume entirely." 
    # Use functions that consume iterators at C speed. 
    if n is None: 
     # feed the entire iterator into a zero-length deque 
     collections.deque(iterator, maxlen=0) 
    else: 
     # advance to the empty slice starting at position n 
     next(itertools.islice(iterator, n, n), None) 

urls = itertools.cycle(all_urls) 
consume(urls, i - 1) 
for url in urls: 
    print(url) 
+0

はいけません'消費する(urls、i - 1)'であるか? –

+0

@ juanpa.arrivillaga - うん、私はそれがすべきだと思う:-)。それはまた、 '私は何とか' None'になってしまった場合、無限ループを防ぐことができるので、良いことです:-) – mgilson

関連する問題